Repository: rockytriton/LLD Branch: main Commit: 57de54e48eb8 Files: 648 Total size: 3.1 MB Directory structure: gitextract_cwq282cg/ ├── README.md ├── linux_os/ │ ├── part1/ │ │ └── src/ │ │ ├── init.c │ │ └── start.S │ ├── part10/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── drmlist/ │ │ │ ├── Makefile │ │ │ └── drmlist.c │ │ ├── fbset/ │ │ │ ├── Makefile │ │ │ └── fbset.c │ │ ├── include/ │ │ │ ├── libfb.h │ │ │ ├── mydrm.h │ │ │ ├── mylib.h │ │ │ └── printf.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ ├── libfb/ │ │ │ ├── Makefile │ │ │ └── fb.c │ │ ├── mydrm/ │ │ │ ├── Makefile │ │ │ └── mydrm.c │ │ ├── mylib/ │ │ │ ├── Makefile │ │ │ ├── mem.c │ │ │ ├── printf.c │ │ │ ├── start.S │ │ │ ├── sys.c │ │ │ └── util.c │ │ └── printargs/ │ │ ├── Makefile │ │ └── printargs.c │ ├── part2/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── include/ │ │ │ └── mylib.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ └── mylib/ │ │ ├── Makefile │ │ ├── start.S │ │ ├── sys.c │ │ └── util.c │ ├── part3/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── include/ │ │ │ └── mylib.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ └── mylib/ │ │ ├── Makefile │ │ ├── start.S │ │ ├── sys.c │ │ └── util.c │ ├── part4/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── include/ │ │ │ ├── mylib.h │ │ │ └── printf.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ └── mylib/ │ │ ├── Makefile │ │ ├── printf.c │ │ ├── start.S │ │ ├── sys.c │ │ └── util.c │ ├── part5/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── include/ │ │ │ ├── mylib.h │ │ │ └── printf.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ └── mylib/ │ │ ├── Makefile │ │ ├── printf.c │ │ ├── start.S │ │ ├── sys.c │ │ └── util.c │ ├── part6/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── include/ │ │ │ ├── mylib.h │ │ │ └── printf.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ └── mylib/ │ │ ├── Makefile │ │ ├── mem.c │ │ ├── printf.c │ │ ├── start.S │ │ ├── sys.c │ │ └── util.c │ ├── part7/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── include/ │ │ │ ├── mylib.h │ │ │ └── printf.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ ├── mylib/ │ │ │ ├── Makefile │ │ │ ├── mem.c │ │ │ ├── printf.c │ │ │ ├── start.S │ │ │ ├── sys.c │ │ │ └── util.c │ │ └── printargs/ │ │ ├── Makefile │ │ └── printargs.c │ ├── part8/ │ │ ├── myos.img │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── fbset/ │ │ │ ├── Makefile │ │ │ └── fbset.c │ │ ├── include/ │ │ │ ├── libfb.h │ │ │ ├── mylib.h │ │ │ └── printf.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ ├── libfb/ │ │ │ ├── Makefile │ │ │ └── fb.c │ │ ├── mylib/ │ │ │ ├── Makefile │ │ │ ├── mem.c │ │ │ ├── printf.c │ │ │ ├── start.S │ │ │ ├── sys.c │ │ │ └── util.c │ │ └── printargs/ │ │ ├── Makefile │ │ └── printargs.c │ ├── part9/ │ │ └── src/ │ │ ├── base.mk │ │ ├── crt0_s.o │ │ ├── drmlist/ │ │ │ ├── Makefile │ │ │ └── drmlist.c │ │ ├── fbset/ │ │ │ ├── Makefile │ │ │ └── fbset.c │ │ ├── include/ │ │ │ ├── libfb.h │ │ │ ├── mydrm.h │ │ │ ├── mylib.h │ │ │ └── printf.h │ │ ├── init/ │ │ │ ├── Makefile │ │ │ ├── crt0.S │ │ │ └── init.c │ │ ├── lash/ │ │ │ ├── Makefile │ │ │ └── lash.c │ │ ├── libfb/ │ │ │ ├── Makefile │ │ │ └── fb.c │ │ ├── mydrm/ │ │ │ ├── Makefile │ │ │ └── mydrm.c │ │ ├── mylib/ │ │ │ ├── Makefile │ │ │ ├── mem.c │ │ │ ├── printf.c │ │ │ ├── start.S │ │ │ ├── sys.c │ │ │ └── util.c │ │ └── printargs/ │ │ ├── Makefile │ │ └── printargs.c │ └── qemu/ │ └── qemu-run.sh ├── ooc/ │ ├── Makefile │ ├── flog.h │ ├── log.h │ ├── log_console.c │ ├── log_file.c │ └── main.c ├── pico/ │ └── 6502_part1/ │ ├── CMakeLists.txt │ ├── pico_sdk_import.cmake │ └── test.c └── rpi_bm/ ├── part1-5/ │ ├── Makefile │ ├── README.md │ ├── config.txt │ ├── include/ │ │ ├── common.h │ │ ├── gpio.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ └── gpio.h │ │ └── utils.h │ └── src/ │ ├── boot.S │ ├── gpio.c │ ├── kernel.c │ ├── linker.ld │ ├── mini_uart.c │ ├── mm.S │ └── utils.S ├── part10/ │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── irq.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ └── utils.h │ └── src/ │ ├── boot.S │ ├── entry.S │ ├── gpio.c │ ├── i2c.c │ ├── irq.S │ ├── irq.c │ ├── kernel.c │ ├── linker.ld │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ ├── timer.c │ └── utils.S ├── part11/ │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── irq.h │ │ ├── lcd.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ └── utils.h │ ├── spi-slave/ │ │ └── spi-slave.ino │ ├── src/ │ │ ├── boot.S │ │ ├── entry.S │ │ ├── gpio.c │ │ ├── i2c.c │ │ ├── irq.S │ │ ├── irq.c │ │ ├── kernel.c │ │ ├── lcd.c │ │ ├── linker.ld │ │ ├── mini_uart.c │ │ ├── mm.S │ │ ├── printf.c │ │ ├── timer.c │ │ └── utils.S │ └── user_submissions/ │ └── README.md ├── part12/ │ ├── .vscode/ │ │ └── settings.json │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── irq.h │ │ ├── lcd.h │ │ ├── led_display.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ ├── spi.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── spi.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ └── utils.h │ └── src/ │ ├── boot.S │ ├── entry.S │ ├── gpio.c │ ├── i2c.c │ ├── irq.S │ ├── irq.c │ ├── kernel.c │ ├── lcd.c │ ├── led_display.c │ ├── linker.ld │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ ├── spi.c │ ├── timer.c │ └── utils.S ├── part13/ │ ├── .vscode/ │ │ └── settings.json │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── irq.h │ │ ├── lcd.h │ │ ├── led_display.h │ │ ├── mailbox.h │ │ ├── mem.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ ├── spi.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── spi.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ ├── utils.h │ │ └── video.h │ └── src/ │ ├── boot.S │ ├── entry.S │ ├── gpio.c │ ├── i2c.c │ ├── irq.S │ ├── irq.c │ ├── kernel.c │ ├── lcd.c │ ├── led_display.c │ ├── linker.ld │ ├── mailbox.c │ ├── mem.c │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ ├── spi.c │ ├── timer.c │ └── utils.S ├── part14/ │ ├── .vscode/ │ │ └── settings.json │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── irq.h │ │ ├── lcd.h │ │ ├── led_display.h │ │ ├── mailbox.h │ │ ├── mem.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ ├── spi.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── spi.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ ├── utils.h │ │ └── video.h │ ├── square_margin │ └── src/ │ ├── boot.S │ ├── entry.S │ ├── fontData.c │ ├── gpio.c │ ├── i2c.c │ ├── irq.S │ ├── irq.c │ ├── kernel.c │ ├── lcd.c │ ├── led_display.c │ ├── linker.ld │ ├── mailbox.c │ ├── mem.c │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ ├── spi.c │ ├── timer.c │ ├── utils.S │ └── video.c ├── part15/ │ ├── .vscode/ │ │ └── settings.json │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── dma.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── irq.h │ │ ├── lcd.h │ │ ├── led_display.h │ │ ├── mailbox.h │ │ ├── mem.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── dma.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ ├── spi.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── spi.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ ├── utils.h │ │ └── video.h │ ├── square_margin │ └── src/ │ ├── boot.S │ ├── dma.c │ ├── entry.S │ ├── fontData.c │ ├── gpio.c │ ├── i2c.c │ ├── irq.S │ ├── irq.c │ ├── kernel.c │ ├── lcd.c │ ├── led_display.c │ ├── linker.ld │ ├── mailbox.c │ ├── mem.c │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ ├── spi.c │ ├── timer.c │ ├── utils.S │ └── video.c ├── part16/ │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── dma.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── irq.h │ │ ├── lcd.h │ │ ├── led_display.h │ │ ├── mailbox.h │ │ ├── mem.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── mmu.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── dma.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ ├── spi.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── spi.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ ├── utils.h │ │ └── video.h │ ├── square_margin │ └── src/ │ ├── boot.S │ ├── dma.c │ ├── entry.S │ ├── fontData.c │ ├── gpio.c │ ├── i2c.c │ ├── irq.S │ ├── irq.c │ ├── kernel.c │ ├── lcd.c │ ├── led_display.c │ ├── linker.ld │ ├── mailbox.c │ ├── mem.c │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ ├── spi.c │ ├── timer.c │ ├── utils.S │ └── video.c ├── part17/ │ ├── .vscode/ │ │ └── settings.json │ ├── Makefile │ ├── armstub/ │ │ ├── build/ │ │ │ ├── armstub.elf │ │ │ ├── armstub_s.d │ │ │ └── armstub_s.o │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── i2c-slave/ │ │ └── i2c-slave.ino │ ├── include/ │ │ ├── common.h │ │ ├── dma.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── i2c.h │ │ ├── io.h │ │ ├── irq.h │ │ ├── lcd.h │ │ ├── led_display.h │ │ ├── mailbox.h │ │ ├── mem.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── mmu.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── dma.h │ │ │ ├── emmc.h │ │ │ ├── gpio.h │ │ │ ├── i2c.h │ │ │ ├── irq.h │ │ │ ├── spi.h │ │ │ └── timer.h │ │ ├── printf.h │ │ ├── spi.h │ │ ├── sysregs.h │ │ ├── timer.h │ │ ├── utils.h │ │ └── video.h │ ├── square_margin │ └── src/ │ ├── boot/ │ │ ├── boot.S │ │ └── entry.S │ ├── dma/ │ │ └── dma.c │ ├── drivers/ │ │ ├── emmc/ │ │ │ ├── emmc.c │ │ │ └── emmc_clock.c │ │ ├── gpio/ │ │ │ └── gpio.c │ │ ├── i2c/ │ │ │ ├── i2c.c │ │ │ └── lcd.c │ │ ├── mailbox/ │ │ │ └── mailbox.c │ │ ├── muart/ │ │ │ └── mini_uart.c │ │ ├── shared/ │ │ │ └── io.c │ │ ├── spi/ │ │ │ ├── led_display.c │ │ │ └── spi.c │ │ └── video/ │ │ ├── fontData.c │ │ └── video.c │ ├── kernel/ │ │ ├── irq.S │ │ ├── irq.c │ │ ├── kernel.c │ │ └── timer.c │ ├── linker.ld │ ├── mem/ │ │ ├── mem.c │ │ └── mm.S │ └── misc/ │ ├── printf.c │ ├── utils.S │ └── utils.c ├── part6-7/ │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── include/ │ │ ├── common.h │ │ ├── gpio.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ └── gpio.h │ │ ├── printf.h │ │ ├── sysregs.h │ │ └── utils.h │ └── src/ │ ├── boot.S │ ├── gpio.c │ ├── kernel.c │ ├── linker.ld │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ └── utils.S ├── part8/ │ ├── Makefile │ ├── armstub/ │ │ └── src/ │ │ └── armstub.S │ ├── config.txt │ ├── include/ │ │ ├── common.h │ │ ├── entry.h │ │ ├── gpio.h │ │ ├── irq.h │ │ ├── mini_uart.h │ │ ├── mm.h │ │ ├── peripherals/ │ │ │ ├── aux.h │ │ │ ├── base.h │ │ │ ├── gpio.h │ │ │ └── irq.h │ │ ├── printf.h │ │ ├── sysregs.h │ │ └── utils.h │ └── src/ │ ├── boot.S │ ├── entry.S │ ├── gpio.c │ ├── irq.S │ ├── irq.c │ ├── kernel.c │ ├── linker.ld │ ├── mini_uart.c │ ├── mm.S │ ├── printf.c │ └── utils.S └── part9/ ├── Makefile ├── armstub/ │ └── src/ │ └── armstub.S ├── config.txt ├── include/ │ ├── common.h │ ├── entry.h │ ├── gpio.h │ ├── irq.h │ ├── mini_uart.h │ ├── mm.h │ ├── peripherals/ │ │ ├── aux.h │ │ ├── base.h │ │ ├── gpio.h │ │ ├── irq.h │ │ └── timer.h │ ├── printf.h │ ├── sysregs.h │ ├── timer.h │ └── utils.h └── src/ ├── boot.S ├── entry.S ├── gpio.c ├── irq.S ├── irq.c ├── kernel.c ├── linker.ld ├── mini_uart.c ├── mm.S ├── printf.c ├── timer.c └── utils.S ================================================ FILE CONTENTS ================================================ ================================================ FILE: README.md ================================================ Low Level Devel Code for https://www.youtube.com/playlist?list=PLVxiWMqQvhg9FCteL7I0aohj1_YiUx1x8 ================================================ FILE: linux_os/part1/src/init.c ================================================ #include #include unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); unsigned long _strlen(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include #include #include struct mydrm_buf { uint32_t width; uint32_t height; uint32_t stride; uint32_t size; uint32_t handle; uint8_t *map; uint32_t fb; }; struct mydrm_data { int fd; struct mydrm_buf framebuffer[2]; uint32_t crt_id; bool pflip_pending; bool cleanup; int front_buf; uint32_t width; uint32_t height; }; struct mouse_pos_info { int x; int y; int max_x; int max_y; }; struct mouse_pos_info mouse_pos; struct drm_mode_crtc saved_crtc; int set_mode(struct mydrm_data *data, struct drm_mode_get_connector conn, struct drm_mode_modeinfo mode); int main(int argc, char **argv) { printf("DRM modes:\n"); int fd = mydrm_open("/dev/dri/card0"); struct drm_mode_card_res res; if (mydrm_get_resources(fd, &res)) { printf("Failed to open card0 resources\n"); return -1; } int hres = 0; int vres = 0; if (argc == 3) { hres = str_to_int(argv[1]); vres = str_to_int(argv[2]); printf("Attempting to set res: %dx%d\n", hres, vres); } struct mydrm_data data; data.cleanup = false; data.pflip_pending = false; data.front_buf = 0; data.width = hres; data.height = vres; data.fd = fd; sys_ioctl(fd, DRM_IOCTL_SET_MASTER, 0); printf("DRM Connectors: %d\n", res.count_connectors); sleep_sec(1); for (int i=0; iwidth; creq.height = buf->height; creq.bpp = 32; int ret = mydrm_ioctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &creq); if (ret < 0) { printf("Failed to create buffer: %d\n", ret); return false; } buf->stride = creq.pitch; buf->size = creq.size; buf->handle = creq.handle; struct drm_mode_fb_cmd fbcmd; mem_set(&fbcmd, 0, sizeof(fbcmd)); fbcmd.width = buf->width; fbcmd.height = buf->height; fbcmd.depth = 24; fbcmd.bpp = 32; fbcmd.pitch = buf->stride; fbcmd.handle = buf->handle; ret = mydrm_ioctl(fd, DRM_IOCTL_MODE_ADDFB, &fbcmd); if (ret < 0) { printf("Failed to add FB: %d\n", ret); return false; } buf->fb = fbcmd.fb_id; mem_set(&mreq, 0, sizeof(mreq)); mreq.handle = buf->handle; ret = mydrm_ioctl(fd, DRM_IOCTL_MODE_MAP_DUMB, &mreq); if (ret) { printf("Failed to map FB: %d\n", ret); return false; } buf->map = sys_mmap(0, buf->size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, mreq.offset); if (((int64_t)buf->map) == -1) { printf("Failed to map FB!\n"); return false; } mem_set(buf->map, 0, buf->size); return true; } int cursor_size = 20; uint32_t bg_color = 0xFF999999; //AARRGGBB uint32_t cursor_color = 0xFF0000FF; bool left_down = false; bool right_down = false; static void draw_data(int fd, struct mydrm_data *data) { struct mydrm_buf *buf = &data->framebuffer[data->front_buf ^ 1]; int start_x = mouse_pos.x; int start_y = mouse_pos.y; uint32_t *p = (uint32_t *)buf->map; //clear background. mem_set(p, bg_color, buf->size); for (int x=0; xwidth); if (pos * 4 >= buf->size) { //don't try to draw past end of buffer.. break; } uint32_t color = cursor_color; if (left_down) { color |= 0x00FF0000; } if (right_down) { color |= 0x0000FF00; } p[pos] = color; } } struct drm_mode_crtc_page_flip flip; flip.fb_id = buf->fb; flip.crtc_id = data->crt_id; flip.user_data = (uint64_t)data; flip.flags = DRM_MODE_PAGE_FLIP_EVENT; flip.reserved = 0; int ret = mydrm_ioctl(fd, DRM_IOCTL_MODE_PAGE_FLIP, &flip); if (!ret) { data->pflip_pending = true; data->front_buf ^= 1; } else { printf("Failed to flip: %d\n", ret); } } static void page_flip_event(int fd, uint32_t frame, uint32_t sec, uint32_t usec, void *data) { struct mydrm_data *dev = data; dev->pflip_pending = false; if (!dev->cleanup) { draw_data(fd, dev); } } int set_mode(struct mydrm_data *data, struct drm_mode_get_connector conn, struct drm_mode_modeinfo mode) { if (!conn.encoder_id) { printf("No encoder found!\n"); return -1; } struct drm_mode_get_encoder enc; int ret = 0; if (ret = mydrm_get_encoder(data->fd, conn.encoder_id, &enc)) { printf("Encoder load failed: %d, %d - %d - %X\n", ret, data->fd, conn.encoder_id, &enc); return -1; } if (!enc.crtc_id) { printf("No CRT Controller!\n"); return -1; } data->framebuffer[0].width = mode.hdisplay; data->framebuffer[0].height = mode.vdisplay; data->framebuffer[1].width = mode.hdisplay; data->framebuffer[1].height = mode.vdisplay; mouse_pos.x = 0; mouse_pos.y = 0; mouse_pos.max_x = mode.hdisplay; mouse_pos.max_y = mode.vdisplay; if (!create_framebuffer(data->fd, &data->framebuffer[0])) { printf("Failed to create framebuffer 1!\n"); return -1; } if (!create_framebuffer(data->fd, &data->framebuffer[1])) { printf("Failed to create framebuffer 2!\n"); return -1; } printf("Buffer created with size: %d\n", data->framebuffer[0].size); struct drm_mode_crtc crtc; mem_set(&crtc, 0, sizeof(crtc)); crtc.crtc_id = enc.crtc_id; data->crt_id = enc.crtc_id; //get the current CRTC, should be FB controller. ret = mydrm_ioctl(data->fd, DRM_IOCTL_MODE_GETCRTC, &crtc); saved_crtc = crtc; printf("Get CRTC: %d = %d (%d, %d, %x, %s)\n", crtc.crtc_id, ret, crtc.fb_id, crtc.count_connectors, crtc.set_connectors_ptr, crtc.mode.name); mem_set(&crtc, 0, sizeof(crtc)); crtc.crtc_id = enc.crtc_id; mem_copy(&crtc.mode, &mode, sizeof(mode)); crtc.x = 0; crtc.y = 0; crtc.fb_id = data->framebuffer[0].fb; crtc.count_connectors = 1; crtc.set_connectors_ptr = (uint64_t)&conn.connector_id; crtc.mode_valid = 1; int mouse_fd = sys_open("/dev/input/mice", O_RDONLY); printf("MOUSE_FD: %d\n", mouse_fd); printf("CRTC RES: %d/%d...\n", crtc.mode.hdisplay, crtc.mode.vdisplay); sleep_sec(4); //about to set mode... ret = mydrm_ioctl(data->fd, DRM_IOCTL_MODE_SETCRTC, &crtc); if (ret) { printf("FAILED TO SET CRTC! %d\n", ret); return ret; } sleep_sec(1); draw_data(data->fd, data); fd_set fds; FD_ZERO(&fds); struct mydrm_event_context ev; mem_set(&ev, 0, sizeof(ev)); ev.version = 2; ev.page_flip_handler = page_flip_event; while(true) { FD_SET(0, &fds); FD_SET(data->fd, &fds); FD_SET(mouse_fd, &fds); ret = sys_select(mouse_fd + 1, &fds, NULL, NULL, NULL); if (ret < 0) { printf("SELECT FAILED! %d\n", ret); break; } if (FD_ISSET(0, &fds)) { //user pressed key... break; } if (FD_ISSET(data->fd, &fds)) { //drawing happened on the buffer... mydrm_handle_event(data->fd, &ev); } if (FD_ISSET(mouse_fd, &fds)) { //mouse event.. char buffer[3]; int r = sys_read(mouse_fd, buffer, 3); mouse_pos.x += buffer[1]; mouse_pos.y -= buffer[2]; left_down = buffer[0] & 1; right_down = buffer[0] & 2; if (mouse_pos.x > mouse_pos.max_x - cursor_size) { mouse_pos.x = mouse_pos.max_x - cursor_size; } if (mouse_pos.y > mouse_pos.max_y - cursor_size) { mouse_pos.y = mouse_pos.max_y - cursor_size; } printf("MOUSE: %d, %d, %d\n", buffer[0], buffer[1], buffer[2]); } } //after loop, restore original CRTC... saved_crtc.count_connectors = 1; saved_crtc.mode_valid = 1; saved_crtc.set_connectors_ptr = (uint64_t)&conn.connector_id; ret = mydrm_ioctl(data->fd, DRM_IOCTL_MODE_SETCRTC, &saved_crtc); sys_ioctl(data->fd, DRM_IOCTL_DROP_MASTER, 0); sys_close(data->fd); printf("DONE!\n"); return 0; } ================================================ FILE: linux_os/part10/src/fbset/Makefile ================================================ TARGET=fbset CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -lfb -L$(MYOS_PATH)/lib BINDIR = $(PREFIX)/bin all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part10/src/fbset/fbset.c ================================================ #include #include #include #include #include "printf.h" int fill_fb(void *pbuffer, struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi, uint32_t color) { for (int x=0; xxres; x++) { for (int y=0; yyres; y++) { int location = (x + vi->xoffset) * (vi->bits_per_pixel / 8) + (y + vi->yoffset) * fi->line_length; uint32_t *pb = (uint32_t*)(pbuffer + location); *pb = color; } } } int main(int argc, char **argv) { printf("Frame Buffer Setting...\n"); if (argc < 3) { printf("Usage: fbset \n"); return -1; } int fdcon = sys_open("/dev/console", O_RDWR); struct fb_var_screeninfo vi; struct fb_fix_screeninfo fi; fb_get_info(&vi, &fi); int xres = str_to_int(argv[1]); int yres = str_to_int(argv[2]); printf("Current resolution: %dx%d\n", vi.xres, vi.yres); printf("Setting resolution: %dx%d\n", xres, yres); vi.xres = vi.xres_virtual = xres; vi.yres = vi.yres_virtual = yres; if (fb_put_info(&vi) != FB_SUCCESS) { printf("FAILED TO SET BUFFER: %d", errno); return -1; } void *pbuffer = fb_get_buffer(); if (fb_get_info(&vi, &fi) != FB_SUCCESS) { printf("FAILED TO GET VIDEO INFO: %d\n", errno); return -1; } sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFFFFFFFF); sleep_sec(2); sys_ioctl(fdcon, KDSETMODE, (void*)KD_GRAPHICS); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFFFF0000); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFF00FF00); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFF0000FF); sleep_sec(2); sys_ioctl(fdcon, KDSETMODE, (void*)KD_TEXT); return 0; } ================================================ FILE: linux_os/part10/src/include/libfb.h ================================================ #include #include #define FB_ERR_NOFB0 -1 #define FB_ERR_GETINFO -2 #define FB_ERR_PUTINFO -3 #define FB_ERR_MMAP -4 #define FB_SUCCESS 0 int fb_get_info(struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi); int fb_put_info(struct fb_var_screeninfo *vi); void *fb_get_buffer(); ================================================ FILE: linux_os/part10/src/include/mydrm.h ================================================ #pragma once #include #include #include #include struct mydrm_get_cap { uint64_t capability; uint64_t value; }; enum mydrm_modes { DRM_MODE_CONNECTED = 1, DRM_MODE_DISCONNECTED = 2, DRM_MODE_UNKNOWN = 3 }; struct mydrm_event_context { int version; void (*vblank_handler)(int fd, uint32_t sequence, uint32_t tv_sec, uint32_t tv_usec, void *user_data); void (*page_flip_handler)(int fd, uint32_t sequence, uint32_t tv_sec, uint32_t tv_usec, void *user_data); }; extern int mydrm_ioctl(int fd, unsigned long request, void *arg); extern int mydrm_open(const char *device_node); extern int mydrm_get_resources(int fd, struct drm_mode_card_res *res); extern int mydrm_get_connector(int fd, int id, struct drm_mode_get_connector *conn); extern int mydrm_get_encoder(int fd, int id, struct drm_mode_get_encoder *enc); extern int mydrm_handle_event(int fd, struct mydrm_event_context *context); ================================================ FILE: linux_os/part10/src/include/mylib.h ================================================ #pragma once #include #include #include #include #include #include #include #include #include #include extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); extern int str_pos(char *s, char c); extern unsigned long hex_str_to_ulong(char *s); extern int str_to_int(char *s); extern void *sys_brk(void *p); extern int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); extern void *mem_alloc(int size); extern void mem_set(void *p, char n, size_t size); extern void mem_copy(void *dest, void *source, size_t size); extern void str_copy(char *dest, char *source); extern void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); extern int sys_munmap(void *addr, size_t length); extern void *malloc(size_t size); extern void free(void *addr); extern int sys_stat(const char *pathname, struct stat *statbuf); extern int sys_close(unsigned long fd); extern int sys_ioctl(unsigned long fd, unsigned long cmd, void *arg); extern int sys_waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); ================================================ FILE: linux_os/part10/src/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: linux_os/part10/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -lfb -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part10/src/init/crt0.S ================================================ .globl _start _start: # _start is the entry point known to the linker xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit) lea 8(%rsp), %rsi # take the address of argv from the stack lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack xor %eax, %eax # per ABI and compatibility with icc call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main mov %eax, %edi # transfer the return of main to the first argument of _exit xor %eax, %eax # per ABI and compatibility with icc call _exit # terminate the program ================================================ FILE: linux_os/part10/src/init/init.c ================================================ #include #include #include #include #include uint32_t fix_color(uint32_t num) { return (num & 0xFF00FF00) | ((num & 0xFF) << 16) | ((num >> 16) & 0xFF); } int main() { int fdcon = sys_open("/dev/console", O_RDWR); sys_ioctl(fdcon, KDSETMODE, (void *)KD_GRAPHICS); struct fb_var_screeninfo vi; struct fb_fix_screeninfo fi; fb_get_info(&vi, &fi); vi.xres = vi.xres_virtual = 1024; vi.yres = vi.yres_virtual = 768; //add error handling here normally... fb_put_info(&vi); void *pbuffer = fb_get_buffer(); int fd = sys_open("/etc/myos.img", O_RDONLY); int buff_size = sizeof(int) * 1024 * 768; int *buff = malloc(buff_size); sys_read(fd, buff, buff_size); sys_close(fd); int i = 0; for (int y=0; y #include #include "printf.h" #include unsigned long console_fd = 0; struct event_file { struct event_file *next; int fd; char name[64]; }; struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; struct mouse_pos_info { int x; int y; int max_x; int max_y; }; struct mouse_pos_info mouse_pos; struct event_file *event_list_head; void load_event_devices() { printf("Loading Input Devices...\n"); event_list_head = NULL; mouse_pos.x = 0; mouse_pos.y = 0; mouse_pos.max_x = 1024; mouse_pos.max_y = 768; for (int i=0; i<10; i++) { char name[64]; sprintf(name, "/dev/input/event%d", i); int fd = sys_open(name, O_RDONLY); if (fd < 0) { //not found break; } struct event_file *e = malloc(sizeof(struct event_file)); str_copy(e->name, name); e->fd = fd; e->next = event_list_head; event_list_head = e; } } bool handle_event(struct event_file *e, struct input_event *event) { if (event->type == EV_REL) { //mouse relative event. if (event->code == REL_X) { //mouse X event int new_x = mouse_pos.x + event->value; if (new_x >= 0 && new_x <= mouse_pos.max_x) { mouse_pos.x = new_x; } } if (event->code == REL_Y) { //mouse y event int new_y = mouse_pos.y + event->value; if (new_y >= 0 && new_y <= mouse_pos.max_y) { mouse_pos.y = new_y; } } printf("\rMOUSE_POS: %d - %d ", mouse_pos.x, mouse_pos.y); } if (event->type == EV_KEY) { printf("KEY_INPUT: %s - %d - %d - %d\n", e->name, event->code, event->type, event->value); if (event->code == KEY_END) { printf("Exiting.\n"); return true; } } return false; } void handle_events() { printf("Listening for events...\n"); while(true) { fd_set fds; FD_ZERO(&fds); struct event_file *e = event_list_head; while(e) { FD_SET(e->fd, &fds); e = e->next; } int ret = sys_select(event_list_head->fd + 1, &fds, NULL, NULL, NULL); if (ret < 0) { printf("SELECT FAILED!\n"); return; } e = event_list_head; while(e) { if (FD_ISSET(e->fd, &fds)) { char buffer[1024]; int r = sys_read(e->fd, buffer, sizeof(buffer)); int pos = 0; while(pos < r) { struct input_event *event = (struct input_event *)(buffer + pos); pos += sizeof(struct input_event); if (handle_event(e, event)) { return; } } } e = e->next; } } } void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); if (str_eq("", buff)) { str_print(" :> "); continue; } if (!process_command(buff)) { return 0; } str_print(" :> "); } } ================================================ FILE: linux_os/part10/src/libfb/Makefile ================================================ LDFLAGS = -shared TARGET = libfb.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part10/src/libfb/fb.c ================================================ #include #include #include #include int fb_get_info(struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi) { int fd = sys_open("/dev/fb0", O_RDONLY); if (fd < 0) { errno = fd; return FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOGET_VSCREENINFO, vi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_GETINFO; } if ((ret = sys_ioctl(fd, FBIOGET_FSCREENINFO, fi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_GETINFO; } sys_close(fd); return FB_SUCCESS; } int fb_put_info(struct fb_var_screeninfo *vi) { int fd = sys_open("/dev/fb0", O_RDWR); if (fd < 0) { errno = fd; return FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOPUT_VSCREENINFO, vi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_PUTINFO; } sys_close(fd); return FB_SUCCESS; } void *fb_get_buffer() { struct fb_fix_screeninfo fi; int fd = sys_open("/dev/fb0", O_RDWR); if (fd < 0) { errno = fd; return (void *)FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOGET_FSCREENINFO, &fi)) < 0) { errno = ret; sys_close(fd); return (void *)FB_ERR_GETINFO; } void *fb = sys_mmap(0, fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); sys_close(fd); return fb; } ================================================ FILE: linux_os/part10/src/mydrm/Makefile ================================================ LDFLAGS = -shared TARGET = libmydrm.so CSOURCES = $(shell echo *.c) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part10/src/mydrm/mydrm.c ================================================ #include #include #include #include #ifndef O_CLOEXEC #define O_CLOEXEC 02000000 #endif int mydrm_ioctl(int fd, unsigned long request, void *arg) { int ret; do { ret = sys_ioctl(fd, request, arg); } while(ret == -EINTR || ret == -EAGAIN); return ret; } //opening a device such as /dev/dri/card0 int mydrm_open(const char *device_node) { int fd = sys_open((char *)device_node, O_RDWR | O_CLOEXEC); if (fd < 0) { return fd; } struct mydrm_get_cap get_cap = { .capability = DRM_CAP_DUMB_BUFFER, .value = 0 }; if (mydrm_ioctl(fd, DRM_IOCTL_GET_CAP, &get_cap) < 0 || !get_cap.value) { return -EOPNOTSUPP; } return fd; } int mydrm_get_resources(int fd, struct drm_mode_card_res *res) { mem_set(res, 0, sizeof(struct drm_mode_card_res)); int ior = 0; if (mydrm_ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, res)) { return -1; } if (res->count_fbs) { res->fb_id_ptr = (uint64_t)malloc(res->count_fbs * sizeof(uint32_t)); mem_set((void *)res->fb_id_ptr, 0, res->count_fbs * sizeof(uint32_t)); } if (res->count_crtcs) { res->crtc_id_ptr = (uint64_t)malloc(res->count_crtcs * sizeof(uint32_t)); mem_set((void *)res->crtc_id_ptr, 0, res->count_crtcs * sizeof(uint32_t)); } if (res->count_connectors) { res->connector_id_ptr = (uint64_t)malloc(res->count_connectors * sizeof(uint32_t)); mem_set((void *)res->connector_id_ptr, 0, res->count_connectors * sizeof(uint32_t)); } if (res->count_encoders) { res->encoder_id_ptr = (uint64_t)malloc(res->count_encoders * sizeof(uint32_t)); mem_set((void *)res->encoder_id_ptr, 0, res->count_encoders * sizeof(uint32_t)); } ior = mydrm_ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, res); if (ior) { return -1; } return 0; } int mydrm_get_connector(int fd, int id, struct drm_mode_get_connector *conn) { mem_set(conn, 0, sizeof(struct drm_mode_get_connector)); conn->connector_id = id; if (mydrm_ioctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, conn)) { return -1; } if (conn->count_props) { conn->props_ptr = (uint64_t)malloc(conn->count_props * sizeof(uint32_t)); conn->prop_values_ptr = (uint64_t)malloc(conn->count_props * sizeof(uint64_t)); } if (conn->count_modes) { conn->modes_ptr = (uint64_t)malloc(conn->count_modes * sizeof(struct drm_mode_modeinfo)); } if (conn->count_encoders) { conn->encoders_ptr = (uint64_t)malloc(conn->count_encoders * sizeof(uint32_t)); } if (mydrm_ioctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, conn)) { return -1; } return 0; } int mydrm_get_encoder(int fd, int id, struct drm_mode_get_encoder *enc) { mem_set(enc, 0, sizeof(struct drm_mode_get_encoder)); enc->encoder_id = id; if (mydrm_ioctl(fd, DRM_IOCTL_MODE_GETENCODER, enc)) { return -1; } return 0; } int mydrm_handle_event(int fd, struct mydrm_event_context *context) { char buffer[1024]; struct drm_event *e; int len = sys_read(fd, buffer, sizeof(buffer)); if (!len) { return 0; } if (len < sizeof(struct drm_event)) { return -1; } int i=0; while(i < len) { e = (struct drm_event *)&buffer[i]; i += e->length; switch(e->type) { case DRM_EVENT_FLIP_COMPLETE: { struct drm_event_vblank *vb = (struct drm_event_vblank *)e; context->page_flip_handler(fd, vb->sequence, vb->tv_sec, vb->tv_usec, (void *)vb->user_data); } break; } } return 0; } ================================================ FILE: linux_os/part10/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part10/src/mylib/mem.c ================================================ #include #include "printf.h" #define DEBUG_MEM 1 #define FLAG_MEM_ALLOCATED 1 #define FLAG_MEM_MAPPED 2 static const int PAGE_SIZE = 4096; static const int RESIZE_THRESHOLD = 16; static const int MMAP_THRESHOLD = 128 * 1024; static const int HEADER_SIZE = 4; static const int HEADER_FULL_SIZE = HEADER_SIZE * 2; static uint32_t HEADER_SIZE_MASK = 0xFFFFFFF8; static uint32_t HEADER_FLAGS_MASK = 7; //0111 /* CHUNK_HEADER { size: 29-bits - 8 bit aligned flags: 3-bits } HEAP CHUNK = { header: 4 bytes data: $size bytes header: 4 bytes } MMAP CHUNK = { header: 4 bytes data: $size bytes } Header Flags: Bit 0 - 0 = free, 1 = allocated Bit 1 - 0 = heap, 1 = mmap Bit 2 - reserved. Heap Layout: |-H1-SIZE-FLAGS-| < heap start, first chunk header. |---------------| |---------------| |---------------| |---------------| |-H1-SIZE-FLAGS-| < first chunk header |-H2-SIZE-FLAGS-| < second chunk header |---------------| |---------------| |---------------| |---------------| |-H2-SIZE-FLAGS-| < second chunk header |---------------| < heap end (current brk value) */ static uint8_t *p_heap_start = NULL; static uint8_t *p_first_free = NULL; static uint8_t *p_heap_end = NULL; #define P_AS_U32(p) ((uint32_t*)p) static inline uint32_t chunk_size(uint8_t *p) { return *P_AS_U32(p) & HEADER_SIZE_MASK; } static inline bool is_chunk_alloc(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_ALLOCATED; } static inline bool is_chunk_free(uint8_t *p) { return !is_chunk_alloc(p); } static inline bool is_chunk_mapped(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_MAPPED; } static inline uint8_t *next_chunk(uint8_t *p) { return (p + chunk_size(p) + HEADER_FULL_SIZE); } static inline uint8_t *chunk_set_size(uint8_t *p, size_t size) { *P_AS_U32(p) = size; *P_AS_U32((p + size + HEADER_SIZE)) = size; return p; } static inline uint8_t *chunk_set_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) |= flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) |= flags; return p; } static inline uint8_t *chunk_unset_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) &= ~flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) &= ~flags; return p; } static inline size_t align_8(size_t size) { uint32_t flags = size & HEADER_FLAGS_MASK; return flags ? size + 8 - flags : size; } static void init_heap() { p_heap_start = sys_brk(NULL); p_heap_end = p_heap_start + PAGE_SIZE; sys_brk(p_heap_end); //the first free entry is at the start of the heap... p_first_free = p_heap_start; //nothing allocated yet, so set size full... chunk_set_size(p_first_free, PAGE_SIZE - HEADER_FULL_SIZE); if (DEBUG_MEM) { printf("MEM: Init Heap:\n"); printf("MEM: \tStart: %lX\n", p_heap_start); printf("MEM: \tEnd : %lX\n", p_heap_end); printf("MEM: \tFirst Size: %ld\n", chunk_size(p_first_free)); printf("MEM: \tHeap Size: %ld\n", p_heap_end - p_heap_start); } } void print_heap() { if (!DEBUG_MEM) { return; } if (!p_heap_start) { init_heap(); } printf("MEM: Heap Info %lX to %lX (%ld):\n", p_heap_start, p_heap_end, p_heap_end - p_heap_start); uint8_t *p = p_heap_start; while(p < p_heap_end) { printf("\tMEM: %lX Size: %d - %s\n", p, chunk_size(p), is_chunk_free(p) ? "FREE" : "ALLOC"); p = next_chunk(p); } } static uint8_t *find_first_fit(size_t size) { for (uint8_t *p = p_first_free; p < p_heap_end; p = next_chunk(p)) { if (is_chunk_free(p) && chunk_size(p) >= size) { return p; } } return NULL; //need more memory. } static uint8_t *alloc_new_memory(size_t in_size) { int num_pages = (in_size / PAGE_SIZE) + 1; if (in_size % PAGE_SIZE < HEADER_FULL_SIZE) { //there is enough space for buffer, but not buffer + headers. num_pages++; } size_t size = num_pages * PAGE_SIZE; char *prev_end = p_heap_end; p_heap_end = sys_brk(p_heap_end + size); return chunk_set_size(prev_end, size - HEADER_FULL_SIZE); } void *malloc(size_t in_size) { if (!p_heap_start) { init_heap(); } if (in_size >= MMAP_THRESHOLD) { //not going to use heap, actually use mmap instead... uint8_t *p = sys_mmap(NULL, in_size + HEADER_SIZE_MASK, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); chunk_set_size(p, in_size); chunk_set_flags(p, FLAG_MEM_MAPPED | FLAG_MEM_ALLOCATED); //user's pointer starts just past the header. return p + HEADER_SIZE; } //not mmap, use heap instead. //8 bit align the size... size_t size = align_8(in_size); uint8_t *p = find_first_fit(size); if (p == NULL) { p = alloc_new_memory(size); } size_t csize = chunk_size(p); size_t diff = csize - size; if (diff > RESIZE_THRESHOLD) { size_t next_size = diff - HEADER_FULL_SIZE; chunk_set_size(p, size); chunk_set_size(next_chunk(p), next_size); } chunk_set_flags(p, FLAG_MEM_ALLOCATED); return p + HEADER_SIZE; } void free(void *up) { uint8_t *p = ((uint8_t *)up) - HEADER_SIZE; if (is_chunk_mapped(p)) { //it was not on the heap, unmap it. int ret = sys_munmap(p, chunk_size(p) + HEADER_SIZE); if (DEBUG_MEM) { printf("MEM: free mapped, returned %d\n", ret); } return; } chunk_unset_flags(p, FLAG_MEM_ALLOCATED); if (is_chunk_free(next_chunk(p))) { //if next chunk is free, let's merge them. size_t new_size = chunk_size(p) + chunk_size(next_chunk(p)) + HEADER_FULL_SIZE; chunk_set_size(p, new_size); } if (next_chunk(p) >= p_heap_end) { //we are on the last chunk on the heap, let's do some actual //freeing of memory and move the brk back some. p_heap_end = sys_brk(p); } if (p < p_first_free) { p_first_free = p; } } ================================================ FILE: linux_os/part10/src/mylib/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include #include typedef void (*putcf) (void*,char); static putcf stdout_putf = NULL; static void* stdout_putp = NULL; #define PRINTF_LONG_SUPPORT 1 #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned long int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } extern unsigned long printf_fd = 0; void putc_console(void *p, char c) { sys_write(printf_fd, &c, 1); } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); if (stdout_putf == NULL) { printf_fd = sys_open("/dev/console", O_WRONLY | O_NDELAY); stdout_putf = putc_console; } tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: linux_os/part10/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part10/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } /* .text .data .bss heap invalid stack [--------|-------|-------|---------|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX|-----] ^ brk (0x1FC1000) brk(0) = 0x1FC0000 brk(0x1FC0000 + 0x1000) = 0x1FC1000 */ void *sys_brk(void *p) { return _syscall(SYS_brk, p, 0, 0, 0, 0, 0); } int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { return _syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout, 0); } void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) { return _syscall(SYS_mmap, addr, length, prot, flags, fd, offset); } int sys_munmap(void *addr, size_t length) { return _syscall(SYS_munmap, addr, length, 0, 0, 0, 0); } int sys_stat(const char *pathname, struct stat *statbuf) { return _syscall(SYS_stat, pathname, statbuf, 0, 0, 0, 0); } int sys_close(unsigned long fd) { return _syscall(SYS_close, fd, 0, 0, 0, 0, 0); } int sys_ioctl(unsigned long fd, unsigned long cmd, void *arg) { return _syscall(SYS_ioctl, fd, cmd, arg, 0, 0, 0); } int sys_waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options) { return _syscall(SYS_waitid, (unsigned long)idtype, id, infop, options, 0, 0); } ================================================ FILE: linux_os/part10/src/mylib/util.c ================================================ #include #include #include "printf.h" unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include "printf.h" int main(int argc, char **argv) { printf("PrintArgs: %d\n", argc); for (int i=1; i #include #include int main() { char *msg = "MyOS 0.0.0.1 Initializing...\n"; sleep_sec(1); str_print(msg); sleep_sec(1); char buff[255]; char *filename = "/src/init.c"; str_print("Opening file: "); str_print(filename); str_print("\n"); unsigned long fd = sys_open(filename, O_RDONLY); sys_read(fd, buff, sizeof(buff)); str_print(buff); for (int t=0; t<3; t++) { //event loop, for now just tick... sleep_sec(1); str_print("TICK!\n"); } sys_reboot(); return 0; } ================================================ FILE: linux_os/part2/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part2/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part2/src/mylib/sys.c ================================================ #include #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } ================================================ FILE: linux_os/part2/src/mylib/util.c ================================================ #include #include unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); ================================================ FILE: linux_os/part3/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part3/src/init/crt0.S ================================================ .globl _start _start: call main ================================================ FILE: linux_os/part3/src/init/init.c ================================================ #include #include #include int main() { char *msg = "MyOS 0.0.0.2 Initializing...\n"; sleep_sec(1); str_print(msg); sleep_sec(1); execute_process("/bin/lash"); while(1) { //event loop, for now just tick... sleep_sec(1); } return 0; } ================================================ FILE: linux_os/part3/src/lash/Makefile ================================================ TARGET=lash CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib BINDIR = $(PREFIX)/bin all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part3/src/lash/lash.c ================================================ #include #include unsigned long console_fd = 0; void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); console_open(); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); str_print("INPUT: "); str_print(buff); str_print("\n"); if (str_eq(buff, "reboot")) { str_print("\n\n*** SYSTEM REBOOTING ***\n"); sys_reboot(); } str_print(" :> "); } } ================================================ FILE: linux_os/part3/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part3/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part3/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } ================================================ FILE: linux_os/part3/src/mylib/util.c ================================================ #include #include unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); extern int str_pos(char *s, char c); extern unsigned long hex_str_to_ulong(char *s); extern int str_to_int(char *s); extern void *sys_brk(void *p); ================================================ FILE: linux_os/part4/src/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: linux_os/part4/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part4/src/init/crt0.S ================================================ .globl _start _start: call main ================================================ FILE: linux_os/part4/src/init/init.c ================================================ #include #include #include int main() { char *msg = "MyOS 0.0.0.2 Initializing...\n"; sleep_sec(1); str_print(msg); sleep_sec(1); execute_process("/bin/lash"); while(1) { //event loop, for now just tick... sleep_sec(1); } return 0; } ================================================ FILE: linux_os/part4/src/lash/Makefile ================================================ TARGET=lash CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib BINDIR = $(PREFIX)/bin all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part4/src/lash/lash.c ================================================ #include #include #include "printf.h" unsigned long console_fd = 0; void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); console_open(); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); process_command(buff); str_print(" :> "); } } ================================================ FILE: linux_os/part4/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part4/src/mylib/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include #include typedef void (*putcf) (void*,char); static putcf stdout_putf = NULL; static void* stdout_putp = NULL; #define PRINTF_LONG_SUPPORT 1 #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } extern unsigned long printf_fd = 0; void putc_console(void *p, char c) { sys_write(printf_fd, &c, 1); } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); if (stdout_putf == NULL) { printf_fd = sys_open("/dev/console", O_WRONLY | O_NDELAY); stdout_putf = putc_console; } tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: linux_os/part4/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part4/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } /* .text .data .bss heap invalid stack [--------|-------|-------|---------|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX|-----] ^ brk (0x1FC1000) brk(0) = 0x1FC0000 brk(0x1FC0000 + 0x1000) = 0x1FC1000 */ void *sys_brk(void *p) { return _syscall(SYS_brk, p, 0, 0, 0, 0, 0); } ================================================ FILE: linux_os/part4/src/mylib/util.c ================================================ #include #include #include "printf.h" unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include #include extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); extern int str_pos(char *s, char c); extern unsigned long hex_str_to_ulong(char *s); extern int str_to_int(char *s); extern void *sys_brk(void *p); extern int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); extern void *mem_alloc(int size); extern void mem_set(void *p, char n, size_t size); extern void mem_copy(void *dest, void *source, size_t size); extern void str_copy(char *dest, char *source); ================================================ FILE: linux_os/part5/src/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: linux_os/part5/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part5/src/init/crt0.S ================================================ .globl _start _start: call main ================================================ FILE: linux_os/part5/src/init/init.c ================================================ #include #include #include int main() { char *msg = "MyOS 0.0.0.2 Initializing...\n"; sleep_sec(1); str_print(msg); sleep_sec(1); execute_process("/bin/lash"); while(1) { //event loop, for now just tick... sleep_sec(1); } return 0; } ================================================ FILE: linux_os/part5/src/lash/Makefile ================================================ TARGET=lash CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib BINDIR = $(PREFIX)/bin all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part5/src/lash/lash.c ================================================ #include #include #include "printf.h" #include unsigned long console_fd = 0; struct event_file { struct event_file *next; int fd; char name[64]; }; struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; struct mouse_pos_info { int x; int y; int max_x; int max_y; }; struct mouse_pos_info mouse_pos; struct event_file *event_list_head; void load_event_devices() { printf("Loading Input Devices...\n"); event_list_head = NULL; mouse_pos.x = 0; mouse_pos.y = 0; mouse_pos.max_x = 1024; mouse_pos.max_y = 768; for (int i=0; i<10; i++) { char name[64]; sprintf(name, "/dev/input/event%d", i); int fd = sys_open(name, O_RDONLY); if (fd < 0) { //not found break; } struct event_file *e = mem_alloc(sizeof(struct event_file)); str_copy(e->name, name); e->fd = fd; e->next = event_list_head; event_list_head = e; } } bool handle_event(struct event_file *e, struct input_event *event) { if (event->type == EV_REL) { //mouse relative event. if (event->code == REL_X) { //mouse X event int new_x = mouse_pos.x + event->value; if (new_x >= 0 && new_x <= mouse_pos.max_x) { mouse_pos.x = new_x; } } if (event->code == REL_Y) { //mouse y event int new_y = mouse_pos.y + event->value; if (new_y >= 0 && new_y <= mouse_pos.max_y) { mouse_pos.y = new_y; } } printf("\rMOUSE_POS: %d - %d ", mouse_pos.x, mouse_pos.y); } if (event->type == EV_KEY) { printf("KEY_INPUT: %s - %d - %d - %d\n", e->name, event->code, event->type, event->value); if (event->code == KEY_END) { printf("Exiting.\n"); return true; } } return false; } void handle_events() { printf("Listening for events...\n"); while(true) { fd_set fds; FD_ZERO(&fds); struct event_file *e = event_list_head; while(e) { FD_SET(e->fd, &fds); e = e->next; } int ret = sys_select(event_list_head->fd + 1, &fds, NULL, NULL, NULL); if (ret < 0) { printf("SELECT FAILED!\n"); return; } e = event_list_head; while(e) { if (FD_ISSET(e->fd, &fds)) { char buffer[1024]; int r = sys_read(e->fd, buffer, sizeof(buffer)); int pos = 0; while(pos < r) { struct input_event *event = (struct input_event *)(buffer + pos); pos += sizeof(struct input_event); if (handle_event(e, event)) { return; } } } e = e->next; } } } void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); process_command(buff); str_print(" :> "); } } ================================================ FILE: linux_os/part5/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part5/src/mylib/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include #include typedef void (*putcf) (void*,char); static putcf stdout_putf = NULL; static void* stdout_putp = NULL; #define PRINTF_LONG_SUPPORT 1 #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } extern unsigned long printf_fd = 0; void putc_console(void *p, char c) { sys_write(printf_fd, &c, 1); } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); if (stdout_putf == NULL) { printf_fd = sys_open("/dev/console", O_WRONLY | O_NDELAY); stdout_putf = putc_console; } tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: linux_os/part5/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part5/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } /* .text .data .bss heap invalid stack [--------|-------|-------|---------|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX|-----] ^ brk (0x1FC1000) brk(0) = 0x1FC0000 brk(0x1FC0000 + 0x1000) = 0x1FC1000 */ void *sys_brk(void *p) { return _syscall(SYS_brk, p, 0, 0, 0, 0, 0); } int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { return _syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout, 0); } ================================================ FILE: linux_os/part5/src/mylib/util.c ================================================ #include #include #include "printf.h" unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include #include #include #include extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); extern int str_pos(char *s, char c); extern unsigned long hex_str_to_ulong(char *s); extern int str_to_int(char *s); extern void *sys_brk(void *p); extern int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); extern void *mem_alloc(int size); extern void mem_set(void *p, char n, size_t size); extern void mem_copy(void *dest, void *source, size_t size); extern void str_copy(char *dest, char *source); extern void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); extern int sys_munmap(void *addr, size_t length); extern void *malloc(size_t size); extern void free(void *addr); ================================================ FILE: linux_os/part6/src/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: linux_os/part6/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part6/src/init/crt0.S ================================================ .globl _start _start: call main ================================================ FILE: linux_os/part6/src/init/init.c ================================================ #include #include #include int main() { char *msg = "MyOS 0.0.0.2 Initializing...\n"; sleep_sec(1); str_print(msg); sleep_sec(1); execute_process("/bin/lash"); while(1) { //event loop, for now just tick... sleep_sec(1); } return 0; } ================================================ FILE: linux_os/part6/src/lash/Makefile ================================================ TARGET=lash CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib BINDIR = $(PREFIX)/bin all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part6/src/lash/lash.c ================================================ #include #include #include "printf.h" #include unsigned long console_fd = 0; struct event_file { struct event_file *next; int fd; char name[64]; }; struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; struct mouse_pos_info { int x; int y; int max_x; int max_y; }; struct mouse_pos_info mouse_pos; struct event_file *event_list_head; void load_event_devices() { printf("Loading Input Devices...\n"); event_list_head = NULL; mouse_pos.x = 0; mouse_pos.y = 0; mouse_pos.max_x = 1024; mouse_pos.max_y = 768; for (int i=0; i<10; i++) { char name[64]; sprintf(name, "/dev/input/event%d", i); int fd = sys_open(name, O_RDONLY); if (fd < 0) { //not found break; } struct event_file *e = malloc(sizeof(struct event_file)); str_copy(e->name, name); e->fd = fd; e->next = event_list_head; event_list_head = e; } } bool handle_event(struct event_file *e, struct input_event *event) { if (event->type == EV_REL) { //mouse relative event. if (event->code == REL_X) { //mouse X event int new_x = mouse_pos.x + event->value; if (new_x >= 0 && new_x <= mouse_pos.max_x) { mouse_pos.x = new_x; } } if (event->code == REL_Y) { //mouse y event int new_y = mouse_pos.y + event->value; if (new_y >= 0 && new_y <= mouse_pos.max_y) { mouse_pos.y = new_y; } } printf("\rMOUSE_POS: %d - %d ", mouse_pos.x, mouse_pos.y); } if (event->type == EV_KEY) { printf("KEY_INPUT: %s - %d - %d - %d\n", e->name, event->code, event->type, event->value); if (event->code == KEY_END) { printf("Exiting.\n"); return true; } } return false; } void handle_events() { printf("Listening for events...\n"); while(true) { fd_set fds; FD_ZERO(&fds); struct event_file *e = event_list_head; while(e) { FD_SET(e->fd, &fds); e = e->next; } int ret = sys_select(event_list_head->fd + 1, &fds, NULL, NULL, NULL); if (ret < 0) { printf("SELECT FAILED!\n"); return; } e = event_list_head; while(e) { if (FD_ISSET(e->fd, &fds)) { char buffer[1024]; int r = sys_read(e->fd, buffer, sizeof(buffer)); int pos = 0; while(pos < r) { struct input_event *event = (struct input_event *)(buffer + pos); pos += sizeof(struct input_event); if (handle_event(e, event)) { return; } } } e = e->next; } } } void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); process_command(buff); str_print(" :> "); } } ================================================ FILE: linux_os/part6/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part6/src/mylib/mem.c ================================================ #include #include "printf.h" #define DEBUG_MEM 1 #define FLAG_MEM_ALLOCATED 1 #define FLAG_MEM_MAPPED 2 static const int PAGE_SIZE = 4096; static const int RESIZE_THRESHOLD = 16; static const int MMAP_THRESHOLD = 128 * 1024; static const int HEADER_SIZE = 4; static const int HEADER_FULL_SIZE = HEADER_SIZE * 2; static uint32_t HEADER_SIZE_MASK = 0xFFFFFFF8; static uint32_t HEADER_FLAGS_MASK = 7; //0111 /* CHUNK_HEADER { size: 29-bits - 8 bit aligned flags: 3-bits } HEAP CHUNK = { header: 4 bytes data: $size bytes header: 4 bytes } MMAP CHUNK = { header: 4 bytes data: $size bytes } Header Flags: Bit 0 - 0 = free, 1 = allocated Bit 1 - 0 = heap, 1 = mmap Bit 2 - reserved. Heap Layout: |-H1-SIZE-FLAGS-| < heap start, first chunk header. |---------------| |---------------| |---------------| |---------------| |-H1-SIZE-FLAGS-| < first chunk header |-H2-SIZE-FLAGS-| < second chunk header |---------------| |---------------| |---------------| |---------------| |-H2-SIZE-FLAGS-| < second chunk header |---------------| < heap end (current brk value) */ static uint8_t *p_heap_start = NULL; static uint8_t *p_first_free = NULL; static uint8_t *p_heap_end = NULL; #define P_AS_U32(p) ((uint32_t*)p) static inline uint32_t chunk_size(uint8_t *p) { return *P_AS_U32(p) & HEADER_SIZE_MASK; } static inline bool is_chunk_alloc(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_ALLOCATED; } static inline bool is_chunk_free(uint8_t *p) { return !is_chunk_alloc(p); } static inline bool is_chunk_mapped(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_MAPPED; } static inline uint8_t *next_chunk(uint8_t *p) { return (p + chunk_size(p) + HEADER_FULL_SIZE); } static inline uint8_t *chunk_set_size(uint8_t *p, size_t size) { *P_AS_U32(p) = size; *P_AS_U32((p + size + HEADER_SIZE)) = size; return p; } static inline uint8_t *chunk_set_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) |= flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) |= flags; return p; } static inline uint8_t *chunk_unset_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) &= ~flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) &= ~flags; return p; } static inline size_t align_8(size_t size) { uint32_t flags = size & HEADER_FLAGS_MASK; return flags ? size + 8 - flags : size; } static void init_heap() { p_heap_start = sys_brk(NULL); p_heap_end = p_heap_start + PAGE_SIZE; sys_brk(p_heap_end); //the first free entry is at the start of the heap... p_first_free = p_heap_start; //nothing allocated yet, so set size full... chunk_set_size(p_first_free, PAGE_SIZE - HEADER_FULL_SIZE); if (DEBUG_MEM) { printf("MEM: Init Heap:\n"); printf("MEM: \tStart: %lX\n", p_heap_start); printf("MEM: \tEnd : %lX\n", p_heap_end); printf("MEM: \tFirst Size: %ld\n", chunk_size(p_first_free)); printf("MEM: \tHeap Size: %ld\n", p_heap_end - p_heap_start); } } void print_heap() { if (!DEBUG_MEM) { return; } if (!p_heap_start) { init_heap(); } printf("MEM: Heap Info %lX to %lX (%ld):\n", p_heap_start, p_heap_end, p_heap_end - p_heap_start); uint8_t *p = p_heap_start; while(p < p_heap_end) { printf("\tMEM: %lX Size: %d - %s\n", p, chunk_size(p), is_chunk_free(p) ? "FREE" : "ALLOC"); p = next_chunk(p); } } static uint8_t *find_first_fit(size_t size) { for (uint8_t *p = p_first_free; p < p_heap_end; p = next_chunk(p)) { if (is_chunk_free(p) && chunk_size(p) >= size) { return p; } } return NULL; //need more memory. } static uint8_t *alloc_new_memory(size_t in_size) { int num_pages = (in_size / PAGE_SIZE) + 1; if (in_size % PAGE_SIZE < HEADER_FULL_SIZE) { //there is enough space for buffer, but not buffer + headers. num_pages++; } size_t size = num_pages * PAGE_SIZE; char *prev_end = p_heap_end; p_heap_end = sys_brk(p_heap_end + size); return chunk_set_size(prev_end, size - HEADER_FULL_SIZE); } void *malloc(size_t in_size) { if (!p_heap_start) { init_heap(); } if (in_size >= MMAP_THRESHOLD) { //not going to use heap, actually use mmap instead... uint8_t *p = sys_mmap(NULL, in_size + HEADER_SIZE_MASK, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); chunk_set_size(p, in_size); chunk_set_flags(p, FLAG_MEM_MAPPED | FLAG_MEM_ALLOCATED); //user's pointer starts just past the header. return p + HEADER_SIZE; } //not mmap, use heap instead. //8 bit align the size... size_t size = align_8(in_size); uint8_t *p = find_first_fit(size); if (p == NULL) { p = alloc_new_memory(size); } size_t csize = chunk_size(p); size_t diff = csize - size; if (diff > RESIZE_THRESHOLD) { size_t next_size = diff - HEADER_FULL_SIZE; chunk_set_size(p, size); chunk_set_size(next_chunk(p), next_size); } chunk_set_flags(p, FLAG_MEM_ALLOCATED); return p + HEADER_SIZE; } void free(void *up) { uint8_t *p = ((uint8_t *)up) - HEADER_SIZE; if (is_chunk_mapped(p)) { //it was not on the heap, unmap it. int ret = sys_munmap(p, chunk_size(p) + HEADER_SIZE); if (DEBUG_MEM) { printf("MEM: free mapped, returned %d\n", ret); } return; } chunk_unset_flags(p, FLAG_MEM_ALLOCATED); if (is_chunk_free(next_chunk(p))) { //if next chunk is free, let's merge them. size_t new_size = chunk_size(p) + chunk_size(next_chunk(p)) + HEADER_FULL_SIZE; chunk_set_size(p, new_size); } if (next_chunk(p) >= p_heap_end) { //we are on the last chunk on the heap, let's do some actual //freeing of memory and move the brk back some. p_heap_end = sys_brk(p); } if (p < p_first_free) { p_first_free = p; } } ================================================ FILE: linux_os/part6/src/mylib/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include #include typedef void (*putcf) (void*,char); static putcf stdout_putf = NULL; static void* stdout_putp = NULL; #define PRINTF_LONG_SUPPORT 1 #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned long int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } extern unsigned long printf_fd = 0; void putc_console(void *p, char c) { sys_write(printf_fd, &c, 1); } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); if (stdout_putf == NULL) { printf_fd = sys_open("/dev/console", O_WRONLY | O_NDELAY); stdout_putf = putc_console; } tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: linux_os/part6/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part6/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } /* .text .data .bss heap invalid stack [--------|-------|-------|---------|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX|-----] ^ brk (0x1FC1000) brk(0) = 0x1FC0000 brk(0x1FC0000 + 0x1000) = 0x1FC1000 */ void *sys_brk(void *p) { return _syscall(SYS_brk, p, 0, 0, 0, 0, 0); } int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { return _syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout, 0); } void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) { return _syscall(SYS_mmap, addr, length, prot, flags, fd, offset); } int sys_munmap(void *addr, size_t length) { return _syscall(SYS_munmap, addr, length, 0, 0, 0, 0); } ================================================ FILE: linux_os/part6/src/mylib/util.c ================================================ #include #include #include "printf.h" unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include #include #include #include #include #include #include #include extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); extern int str_pos(char *s, char c); extern unsigned long hex_str_to_ulong(char *s); extern int str_to_int(char *s); extern void *sys_brk(void *p); extern int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); extern void *mem_alloc(int size); extern void mem_set(void *p, char n, size_t size); extern void mem_copy(void *dest, void *source, size_t size); extern void str_copy(char *dest, char *source); extern void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); extern int sys_munmap(void *addr, size_t length); extern void *malloc(size_t size); extern void free(void *addr); extern int sys_stat(const char *pathname, struct stat *statbuf); extern int sys_close(unsigned long fd); ================================================ FILE: linux_os/part7/src/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: linux_os/part7/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part7/src/init/crt0.S ================================================ .globl _start _start: # _start is the entry point known to the linker xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit) lea 8(%rsp), %rsi # take the address of argv from the stack lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack xor %eax, %eax # per ABI and compatibility with icc call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main mov %eax, %edi # transfer the return of main to the first argument of _exit xor %eax, %eax # per ABI and compatibility with icc call _exit # terminate the program ================================================ FILE: linux_os/part7/src/init/init.c ================================================ #include #include #include int main() { char *msg = "MyOS 0.0.0.2 Initializing...\n"; sleep_sec(1); str_print(msg); sleep_sec(1); execute_process("/bin/lash"); while(1) { //event loop, for now just tick... sleep_sec(1); } return 0; } ================================================ FILE: linux_os/part7/src/lash/Makefile ================================================ TARGET=lash CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -L$(MYOS_PATH)/lib BINDIR = $(PREFIX)/bin all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part7/src/lash/lash.c ================================================ #include #include #include "printf.h" #include unsigned long console_fd = 0; struct event_file { struct event_file *next; int fd; char name[64]; }; struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; struct mouse_pos_info { int x; int y; int max_x; int max_y; }; struct mouse_pos_info mouse_pos; struct event_file *event_list_head; void load_event_devices() { printf("Loading Input Devices...\n"); event_list_head = NULL; mouse_pos.x = 0; mouse_pos.y = 0; mouse_pos.max_x = 1024; mouse_pos.max_y = 768; for (int i=0; i<10; i++) { char name[64]; sprintf(name, "/dev/input/event%d", i); int fd = sys_open(name, O_RDONLY); if (fd < 0) { //not found break; } struct event_file *e = malloc(sizeof(struct event_file)); str_copy(e->name, name); e->fd = fd; e->next = event_list_head; event_list_head = e; } } bool handle_event(struct event_file *e, struct input_event *event) { if (event->type == EV_REL) { //mouse relative event. if (event->code == REL_X) { //mouse X event int new_x = mouse_pos.x + event->value; if (new_x >= 0 && new_x <= mouse_pos.max_x) { mouse_pos.x = new_x; } } if (event->code == REL_Y) { //mouse y event int new_y = mouse_pos.y + event->value; if (new_y >= 0 && new_y <= mouse_pos.max_y) { mouse_pos.y = new_y; } } printf("\rMOUSE_POS: %d - %d ", mouse_pos.x, mouse_pos.y); } if (event->type == EV_KEY) { printf("KEY_INPUT: %s - %d - %d - %d\n", e->name, event->code, event->type, event->value); if (event->code == KEY_END) { printf("Exiting.\n"); return true; } } return false; } void handle_events() { printf("Listening for events...\n"); while(true) { fd_set fds; FD_ZERO(&fds); struct event_file *e = event_list_head; while(e) { FD_SET(e->fd, &fds); e = e->next; } int ret = sys_select(event_list_head->fd + 1, &fds, NULL, NULL, NULL); if (ret < 0) { printf("SELECT FAILED!\n"); return; } e = event_list_head; while(e) { if (FD_ISSET(e->fd, &fds)) { char buffer[1024]; int r = sys_read(e->fd, buffer, sizeof(buffer)); int pos = 0; while(pos < r) { struct input_event *event = (struct input_event *)(buffer + pos); pos += sizeof(struct input_event); if (handle_event(e, event)) { return; } } } e = e->next; } } } void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); if (str_eq("", buff)) { str_print(" :> "); continue; } if (!process_command(buff)) { return 0; } str_print(" :> "); } } ================================================ FILE: linux_os/part7/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part7/src/mylib/mem.c ================================================ #include #include "printf.h" #define DEBUG_MEM 1 #define FLAG_MEM_ALLOCATED 1 #define FLAG_MEM_MAPPED 2 static const int PAGE_SIZE = 4096; static const int RESIZE_THRESHOLD = 16; static const int MMAP_THRESHOLD = 128 * 1024; static const int HEADER_SIZE = 4; static const int HEADER_FULL_SIZE = HEADER_SIZE * 2; static uint32_t HEADER_SIZE_MASK = 0xFFFFFFF8; static uint32_t HEADER_FLAGS_MASK = 7; //0111 /* CHUNK_HEADER { size: 29-bits - 8 bit aligned flags: 3-bits } HEAP CHUNK = { header: 4 bytes data: $size bytes header: 4 bytes } MMAP CHUNK = { header: 4 bytes data: $size bytes } Header Flags: Bit 0 - 0 = free, 1 = allocated Bit 1 - 0 = heap, 1 = mmap Bit 2 - reserved. Heap Layout: |-H1-SIZE-FLAGS-| < heap start, first chunk header. |---------------| |---------------| |---------------| |---------------| |-H1-SIZE-FLAGS-| < first chunk header |-H2-SIZE-FLAGS-| < second chunk header |---------------| |---------------| |---------------| |---------------| |-H2-SIZE-FLAGS-| < second chunk header |---------------| < heap end (current brk value) */ static uint8_t *p_heap_start = NULL; static uint8_t *p_first_free = NULL; static uint8_t *p_heap_end = NULL; #define P_AS_U32(p) ((uint32_t*)p) static inline uint32_t chunk_size(uint8_t *p) { return *P_AS_U32(p) & HEADER_SIZE_MASK; } static inline bool is_chunk_alloc(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_ALLOCATED; } static inline bool is_chunk_free(uint8_t *p) { return !is_chunk_alloc(p); } static inline bool is_chunk_mapped(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_MAPPED; } static inline uint8_t *next_chunk(uint8_t *p) { return (p + chunk_size(p) + HEADER_FULL_SIZE); } static inline uint8_t *chunk_set_size(uint8_t *p, size_t size) { *P_AS_U32(p) = size; *P_AS_U32((p + size + HEADER_SIZE)) = size; return p; } static inline uint8_t *chunk_set_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) |= flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) |= flags; return p; } static inline uint8_t *chunk_unset_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) &= ~flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) &= ~flags; return p; } static inline size_t align_8(size_t size) { uint32_t flags = size & HEADER_FLAGS_MASK; return flags ? size + 8 - flags : size; } static void init_heap() { p_heap_start = sys_brk(NULL); p_heap_end = p_heap_start + PAGE_SIZE; sys_brk(p_heap_end); //the first free entry is at the start of the heap... p_first_free = p_heap_start; //nothing allocated yet, so set size full... chunk_set_size(p_first_free, PAGE_SIZE - HEADER_FULL_SIZE); if (DEBUG_MEM) { printf("MEM: Init Heap:\n"); printf("MEM: \tStart: %lX\n", p_heap_start); printf("MEM: \tEnd : %lX\n", p_heap_end); printf("MEM: \tFirst Size: %ld\n", chunk_size(p_first_free)); printf("MEM: \tHeap Size: %ld\n", p_heap_end - p_heap_start); } } void print_heap() { if (!DEBUG_MEM) { return; } if (!p_heap_start) { init_heap(); } printf("MEM: Heap Info %lX to %lX (%ld):\n", p_heap_start, p_heap_end, p_heap_end - p_heap_start); uint8_t *p = p_heap_start; while(p < p_heap_end) { printf("\tMEM: %lX Size: %d - %s\n", p, chunk_size(p), is_chunk_free(p) ? "FREE" : "ALLOC"); p = next_chunk(p); } } static uint8_t *find_first_fit(size_t size) { for (uint8_t *p = p_first_free; p < p_heap_end; p = next_chunk(p)) { if (is_chunk_free(p) && chunk_size(p) >= size) { return p; } } return NULL; //need more memory. } static uint8_t *alloc_new_memory(size_t in_size) { int num_pages = (in_size / PAGE_SIZE) + 1; if (in_size % PAGE_SIZE < HEADER_FULL_SIZE) { //there is enough space for buffer, but not buffer + headers. num_pages++; } size_t size = num_pages * PAGE_SIZE; char *prev_end = p_heap_end; p_heap_end = sys_brk(p_heap_end + size); return chunk_set_size(prev_end, size - HEADER_FULL_SIZE); } void *malloc(size_t in_size) { if (!p_heap_start) { init_heap(); } if (in_size >= MMAP_THRESHOLD) { //not going to use heap, actually use mmap instead... uint8_t *p = sys_mmap(NULL, in_size + HEADER_SIZE_MASK, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); chunk_set_size(p, in_size); chunk_set_flags(p, FLAG_MEM_MAPPED | FLAG_MEM_ALLOCATED); //user's pointer starts just past the header. return p + HEADER_SIZE; } //not mmap, use heap instead. //8 bit align the size... size_t size = align_8(in_size); uint8_t *p = find_first_fit(size); if (p == NULL) { p = alloc_new_memory(size); } size_t csize = chunk_size(p); size_t diff = csize - size; if (diff > RESIZE_THRESHOLD) { size_t next_size = diff - HEADER_FULL_SIZE; chunk_set_size(p, size); chunk_set_size(next_chunk(p), next_size); } chunk_set_flags(p, FLAG_MEM_ALLOCATED); return p + HEADER_SIZE; } void free(void *up) { uint8_t *p = ((uint8_t *)up) - HEADER_SIZE; if (is_chunk_mapped(p)) { //it was not on the heap, unmap it. int ret = sys_munmap(p, chunk_size(p) + HEADER_SIZE); if (DEBUG_MEM) { printf("MEM: free mapped, returned %d\n", ret); } return; } chunk_unset_flags(p, FLAG_MEM_ALLOCATED); if (is_chunk_free(next_chunk(p))) { //if next chunk is free, let's merge them. size_t new_size = chunk_size(p) + chunk_size(next_chunk(p)) + HEADER_FULL_SIZE; chunk_set_size(p, new_size); } if (next_chunk(p) >= p_heap_end) { //we are on the last chunk on the heap, let's do some actual //freeing of memory and move the brk back some. p_heap_end = sys_brk(p); } if (p < p_first_free) { p_first_free = p; } } ================================================ FILE: linux_os/part7/src/mylib/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include #include typedef void (*putcf) (void*,char); static putcf stdout_putf = NULL; static void* stdout_putp = NULL; #define PRINTF_LONG_SUPPORT 1 #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned long int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } extern unsigned long printf_fd = 0; void putc_console(void *p, char c) { sys_write(printf_fd, &c, 1); } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); if (stdout_putf == NULL) { printf_fd = sys_open("/dev/console", O_WRONLY | O_NDELAY); stdout_putf = putc_console; } tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: linux_os/part7/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part7/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } /* .text .data .bss heap invalid stack [--------|-------|-------|---------|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX|-----] ^ brk (0x1FC1000) brk(0) = 0x1FC0000 brk(0x1FC0000 + 0x1000) = 0x1FC1000 */ void *sys_brk(void *p) { return _syscall(SYS_brk, p, 0, 0, 0, 0, 0); } int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { return _syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout, 0); } void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) { return _syscall(SYS_mmap, addr, length, prot, flags, fd, offset); } int sys_munmap(void *addr, size_t length) { return _syscall(SYS_munmap, addr, length, 0, 0, 0, 0); } int sys_stat(const char *pathname, struct stat *statbuf) { return _syscall(SYS_stat, pathname, statbuf, 0, 0, 0, 0); } int sys_close(unsigned long fd) { return _syscall(SYS_close, fd, 0, 0, 0, 0, 0); } ================================================ FILE: linux_os/part7/src/mylib/util.c ================================================ #include #include #include "printf.h" unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include "printf.h" int main(int argc, char **argv) { printf("PrintArgs: %d\n", argc); for (int i=1; iJ}GQMVS[W_Za]d`fagbhcicibhag_f]dZaV_R[MVFP=J|1@[(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B/>X?J~HSOXT\Za^d_fagbhcibhag`g_d\cY`W^R[MVHQBM9En,>P(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B4AaCNPXYaagciciciciciciciciciciciciciciciciciciciciciciciciagZ`OWBM1@[(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B1@[FPT\^dcicicicicicicicicicicicicicicicicicicicicicicici_fY`RYHR=Iz.?U(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+K*;H(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B0@YJTZacicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici]dT\IR:Hv+V(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B3BaYacicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici`e(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BQU]ciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciRY+SbhciciciciciciciciciciciciciciciciciciciciciciciciciCN(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B6Dj]dcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici\a1A_(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BIRcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici_d+1"3:'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BI{`gcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici_e9Gr(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B@Jcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici_c ")/"29'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BJ}(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B6DjagciciciciciciciciciciciciciciciciciciciciciciciciafSYGK9=},/e I3 5F+-_6:yAENRX^agcicicicicicicicicicicicicicicicicicicicici^c %,2%6=(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B_ecicicicicicicicicicicicicicicicicicicicicici_f4Cd(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B8EociciciciciciciciciciciciciciciciciciciVZ8 37qNS`fcicicici^c%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B}TZcici^c%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B %7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BW_cicicicicicicicicicicicicicicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BOWcicicicicicicicicicicicicicicicicicicicici^d(+Z16mafciciciciciciciciciciciciciciciciciciciciciEK#4;(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKScicicicicicicicicicicicicicicicici_e!J%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BX_fciciciciciciciciciciciciciciciciciciciciZ_B "')/-4 06!18"3:$4<$4<#3:"18 07.5)0#(&&T]ccicicicicicicicicicicicicicicicicicicici\a..5'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B5ChciciciciciciciciciciciciciciciciciY]  %(.-4!18#3:$4<$5<#3;"29 /6*1%+" %6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B\ccicicicicicicicicicicicicicicicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BU]cicicicicicicicicicicicicicicicicicicici]b@ %,2#4;%6>&7>&8?'8@'9A'9A(9A(:B(:B(:B(:B(9A'9A'9A'8@&8?&7?%6>$5<-4"( &(U`fciciciciciciciciciciciciciciciciciciciciKO-4'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BGQcicicicicicicicicicicicicicicicici:=~+1#4;%6>&7?'8@'9A(9A(:B(:B(:B(:B(:A'9A'9@&8@&7?%6>$5= 07'- %6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B"3:%+ 04lbhcicicicicicicicicicicicicicicicicicicici.1f-3'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BT\cicicicicicicicicicicicicicicici`f !'"29&7>'9@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A'8@&7?%6=!18',%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B-4;@ciciciciciciciciciciciciciciciciciciciciY_ .4'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B^dciciciciciciciciciciciciciciciciQV!"29&7?(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A'8@&7>$5<,2#%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.4 JNcicicicicicicicicicicicicicicicicicicici@E 06'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B,(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&7?$5=.4 %%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B!-<[acicicicicicicicicicicicicicicicicicici_e5 "3:(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B6Dkcicicicicicicicicicicicicicicicici46s!07'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&7?%5=-3"%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BXbhciciciciciciciciciciciciciGM^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B5Chcicicicicicicicicicicicicicicicicicicici>A$*$5=(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BLScicicicicicicicicicicicicicicicicicicibgB"&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BEOcicicicicicicicicicicicicicicicici%(W "29'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9@&7>"2:%+%6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BZaciciciciciciciciciciciciciW]^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B3Babhcicicicicicicicicicicicicicicicicicici.3j-4'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMcicicicicicicicicicicicicicicicicicici`f8 /6'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKTcicicicicicicicicicicicicicicicici24o%*&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;F_dciciciciciciciciciciciciciQW^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BFPciciciciciciciciciciciciciciciciciciciQV,2'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BY`cicicicicicicicicicicicicicicicicicici6:w /6'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BIRcicicicicicicicicicicicicicicicici]c #3:(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BJ}cicicicicicicicicicicicicici48t^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BZbcicicicicicicicicicicicicicicicicicici03k(.&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BCNciciciciciciciciciciciciciciciciciciciSY %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BDNcicicicicicicicicicicicicicicicicici.0g %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.=QagciciciciciciciciciciciciciJP^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B->QahciciciciciciciciciciciciciciciciciV^(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+=LagciciciciciciciciciciciciciciciFP(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BLUcicicicicicicicicicicicicicicicicicici>A$4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKTcicicicicicicicicicicicicicicicicicici@E$4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B1@[cicicicicicicicicicicicicicicicicicibh')Z*0'9@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:BITcicicicicicicicicicicicicicicicicici;Gv(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BRZciciciciciciciciciciciciciciciZa(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BY_cicicicicicicicicicicicicicicicicicibh2*0'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B1?]ciciciciciciciciciciciciciciciciciciciRW#4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B8Emcicicicicicicicicicicicicicicicicicicici`f,/b,3'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BQagciciciciciciciciciciciciciciciEP(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B,A-3'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKTcicicicicicicicicicicicicicicicicicici,/b %6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BLUcicicicicicicicicicicicicicicicicicicicicibg69x"&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B} %7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B,(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BS[ciciciciciciciciciciciciciciciciciciciciciciciSY;/5'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B):DagciciciciciciciciciciciciciciciciciciRX $5<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BY`cicicicicicicicicicicicicicicicicici^c#3:(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B6Djcicicicicicicicicicicicicicicicicicicicicicicici^c7(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B2@[bhciciciciciciciciciciciciciEJ^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BW_cicicicicicicicicicicicicicicicici]b#3:(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BITcicicicicicicicicicicicicicici`f %"3:(:BEOcicicicicicicicicicicicicicicicicicici.3j"2:(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMcicicicicicicicicicicicicicicicicicici48s %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B0?X`fcicicicicicicicicicicicicicicicicicicicicicicicici]c=Iz(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BNWcicicicicicicicicicicicicicicicicicici@ %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B7CiciciciciciciciciciciciciciciciciciciciCG#3:(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BDPciciciciciciciciciciciciciciciciciciciciciciciciciciciQY.>S(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B>Kcicicicicicicicicicicicicicicici')Z-4'9A(:BV^cicicicicicicicicicicicicicicicicici`e'-'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BV]cicicicicicicicicicicicicicicicicici_e$5=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B6Be`fciciciciciciciciciciciciciciciciciciciciciciciciciciciciciPY/>X(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BI}ahcicicicicicicicicicicicicicicicicicicicicicicicicicicicicici]dBM(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BQahciciciciciciciciciciciciciciciciciKO %7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMcicicicicicicicicicicicicicicici'*Y-4'9A(:B(:BDOcicicicicicicicicicicicicicicicicicici15n$5<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMcicicicicicicicicicicicicicicicicicici24o&7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B>I{ahciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciY`9Fq(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.>SbhciciciciciciciciciciciciciGM^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BT[cicicicicicicicicicicicicicicicici_e "29(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BW_ciciciciciciciciciciciciciciciV\ $5=(:B(:B(:BHScicicicicicicicicicicicicicicicicicici(+Z %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B%+&8@(:B(:B(:BNWciciciciciciciciciciciciciciciciciciciB"'&8?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B7CiciciciciciciciciciciciciciciciciciciciBE"29(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B5Ch^dciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciahMV,XciciciciciciciciciciciciciciciciciciciHL,2'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B0@YY`cicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici`eDN(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BPagcicicicicicicicicicicicicicicicici;@ %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B6Becicicicicicicicicicicicicici>D^ccicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BJTcicicicicicicicicicicicicicicicicici!H-4'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;J`fciciciciciciciciciciciciciciciJN &7>(:B(:B(:B(:BU]cicicicicicicicicicicicicicicicicici_e"29(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BciciciciciciciciciciciciciciciciciciciKO%*&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`gciciciciciciciciciciciciciciciciciciRV %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B%6>'.VX^cicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici`fDP(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B%+&8@(:B(:B(:B(:B(:B\aciciciciciciciciciciciciciciciciciciZ^&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B_fciciciciciciciciciciciciciciciciciciTY%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3: (HMciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciW_5Ch(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BPYcicicicicicicicicicicicicicici_e !#3:(:B(:B(:B(:B(:B(:B]bciciciciciciciciciciciciciciciciciciX^#(&8?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B^eciciciciciciciciciciciciciciciciciciTZ#4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A!07 /2j\acicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicibhIS*;F(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B\cciciciciciciciciciciciciciciciciciciV\(.'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B]dciciciciciciciciciciciciciciciciciciV[!07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A/5,JOciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciY`5Cf(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BS(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B %6=(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BR[cicicicicicicicicicicicicicici_e $#3:(:B(:B(:B(:B(:B(:B(:B(:B\bciciciciciciciciciciciciciciciciciciY^$4<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B_eciciciciciciciciciciciciciciciciciciUZ!&&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A$4;37q[acicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicibhDP(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#(BG`fciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciPX):D(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:Frcicicicicicicicicicicicicici9=|"29(:A(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:Fpcicicicicicicicicicicicicicicicicici67u%+&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BIScicicicicicicicicicicicicicicici&&T.4'9A(:B(:B(:B(:B(:B(:B(:B(:BY`cicicicicicicicicicicicicicicicicici\a%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BagciciciciciciciciciciciciciciciciciciPU&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B&8?+2BMSciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciV]+=L(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B[bciciciciciciciciciciciciciciciciciRW %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B\cciciciciciciciciciciciciciciciV[%5=(:B(:B(:B(:B(:B(:B(:B(:B(:BW^cicicicicicicicicicicicicicicicicici]b%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BbhciciciciciciciciciciciciciciciciciciMS&7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9@"29 ).`V\ciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciYa/>X(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+=LciciciciciciciciciciciciciciciciciciciJN %7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A%6>$)9=}]bcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici[b/>X(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMcicicicicicicicicicicicicici-/e$4;(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.>SchciciciciciciciciciciciciciciciciciAF#&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BT\cicicicicicicicicicicicicicici_e $#3:(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BQZcicicicicicicicicicicicicicicicicicici % %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B3BcciciciciciciciciciciciciciciciciciciciFJ %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B&8? /6 %EIagcicicicicicicicicicicicicicicicicicicicicicicicicicicicicici[b0>V(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B;Gucicicicicicicicicicicicicicicicicicici@C %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A$5="'!HPUciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciZa+K|cicicicicicicicicicicicicicicicicici!$N#(&8?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B/>XbhciciciciciciciciciciciciciFI-4'9A(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B=Jycicicicicicicicicicicicicicicicicici,/b)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKTcicicicicicicicicicicicicicicici$'U.5'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BIRcicicicicicicicicicicicicicicicicicici,/b %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BALcicicicicicicicicicicicicicicicicicici8(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B&8? /6 ,/eX^ciciciciciciciciciciciciciciciciciciciciciciciciciciciciciU](:D(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;F^dciciciciciciciciciciciciciciciU[%5=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BCNcicicicicicicicicicicicicicicicicicici67u %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BFQcicicicicicicicicicicicicicicicicicici/3i %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A%6>&, }&,'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B;Gvcicicicicicicicicicicicicicicicicicici(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKScicicicicicicicicicicicicicicicicicici##N %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'8@"29 :MQcicicicicicicicicicicicicicicicicicicicicicicicicicicibh8Bq'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BRYcicicicicicicicicicicicicicicicicicici %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A&7?-4 .3j\acicicicicicicicicicicicicicicicicicicicicicicicicici]c!0?'9@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BV]ciciciciciciciciciciciciciciciciciUY %6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B2BbciciciciciciciciciciciciciciciciHM!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BchciciciciciciciciciciciciciciciciciciQV %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BY_cicicicicicicicicicicicicicicicicici]c %7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A%6='-)IOciciciciciciciciciciciciciciciciciciciciciciciciciciGM$)&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'8@#3; %45q^dcicicicicicicicicicicicicicicicicicicicicicicicibh"%P#%6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BJ}cicicicicicicicicicicicicici04l#3;(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B):D_eciciciciciciciciciciciciciciciciciDI &7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+SciciciciciciciciciciciciciciciciciciciLQ &7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B&7? 07@UZciciciciciciciciciciciciciciciciciciciciciciciciMQ$5<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BNWcicicicicicicicicicicicicicicicici\b #3:(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMcicicicicicicicicicicicicicicici9<|&,'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BLUcicicicicicicicicicicicicicicicicicici##N%5=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:Hvcicicicicicicicicicicicicicicicicicici?C#&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&7>+2 IMcicicicicicicicicicicicicicicicicicicicicicicibh!H $5<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B %7>(:B(:B(:B(:BEPcicicicicicicicicicicicicici#&R$5<(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BY`ciciciciciciciciciciciciciciciciciOT %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B5ChciciciciciciciciciciciciciciciciIM!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B4CfciciciciciciciciciciciciciciciciciciciIM"29(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BRZcicicicicicicicicicicicicicicicicicici9%+&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B&8@"3:$8(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BD 07'9A(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+VciciciciciciciciciciciciciciciciciciciOT-3'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A%6>*0 ACciciciciciciciciciciciciciciciciciciciciciKO&,'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BLUcicicicicicicicicicicicicibh4 %6=(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BPYciciciciciciciciciciciciciciciciciW]$5<(:B(:B(:B(:B(:B(:B(:B(:BDPcicicicicicicicicicicicicicicici8;|&,'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BLUcicicicicicicicicicicicicicicicicicici.0g(.'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B@Jcicicicicicicicicicicicicicicicicicici?D!07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'8@$4;!&PUcicicicicicicicicicicicicicicicicicicici[a /6'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B9EnciciciciciciciciciciciciciciciciHL!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B\ccicicicicicicicicicicicicicicicicici^d %6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A$5=@Hcicicicicicicicicicicicicicicicicicicici67u%+&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BHRcicicicicicicicicicicicicicicicici_d"29(:A(:B(:B(:B(:B(:BRYcicicicicicicicicicicicicicicici"%P.5'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BV^cicicicicicicicicicicicicicicicicicici!H %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B5ChciciciciciciciciciciciciciciciciciciciPU%6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'8B]cciciciciciciciciciciciciciciciciciciciEH"29(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BSchcicicicicicicicicicicicicicicicici69x%*&8@(:B(:B(:B(:B.=QagciciciciciciciciciciciciciciciUY%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BGQcicicicicicicicicicicicicicicicicicici?C$5=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BJTcicicicicicicicicicicicicicicicicicici;> &7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BIQciciciciciciciciciciciciciciciciciciciNS %&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BGQcicicicicicicicicicicicicicicici8<{','8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B1@[ciciciciciciciciciciciciciciciciciciciTZ!18(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BZacicicicicicicicicicicicicicicicicicibh:%*&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B0>VbhciciciciciciciciciciciciciciciciciciUZ"3:(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;J_fcicicicicicicicicicicicicicicicicicibh9%5=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B?Kcicicicicicicicicicicicicicicicicici`f-4'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BXbhciciciciciciciciciciciciciciciUZ%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BW_cicicicicicicicicicicicicicicicicicici8;|$5<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BEOciciciciciciciciciciciciciciciciciciciRW&7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B4Cfcicicicicicicicicicicicicicicicicicibh &&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BIScicicicicicicicicicicicicicicici8(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BQchcicicicicicicicicicicicicicicicici(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BALcicicicicicicicicicicicicicicicici`f)!18]dcicicicicicicicicicicicicicici^e#3;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;F^ecicicicicicicicicicicicicicicicicicici26p%*&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B>J}cicicicicicicicicicicicicicicicicicici]b.5'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:Bbhcicicicicicicicicicicicicicicicici^c"3:(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BvciciciciciciciciciciciciciciciciFM"&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKSciciciciciciciciciciciciciciciciciciciY] %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:D\aciciciciciciciciciciciciciciciciciciciCG$5<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`gcicicicicicicicicicicicicicicicici[`,2'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BAcicicicicicicicicicicicicici-/f$4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BMWciciciciciciciciciciciciciciciciciVZQVcicicicicicicicicicicicicicicici!$P/5'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.?Uagcicicicicicicicicicicicicicicicicicici8;|"29(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BCNciciciciciciciciciciciciciciciciciciciaf8 %7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BbhciciciciciciciciciciciciciciciciciX^$)&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BMTciciciciciciciciciciciciciciciciciciciagB"29(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B3BcciciciciciciciciciciciciciciciciciciGK %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B?J~cicicicicicicicicicicicicicicicicici;? %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BS`gciciciciciciciciciciciciciciciciciciciY_ %*&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B,(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B9Grcicicicicicicicicicicicicicicicicibh).`ciciciciciciciciciciciciciciciciTY %6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B):D[bcicicicicicicicicicicicicicicicicicicici9<|+2'9@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BDOciciciciciciciciciciciciciciciciciciciciZ` %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B0?XbhciciciciciciciciciciciciciciciciciSX$5=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.?UbhciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciGK#&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B,(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B5Cf^ecicicicicicicicicicicicicicicicicicicici]b0!&&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BISciciciciciciciciciciciciciciciciciciV\%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BI{ciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciSY %6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKTcicicicicicicicicicicicicicicicicicicicici^d')Z%6=(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:Frcici[bFP,(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BPagciciciciciciciciciciciciciciciciciciciciciciciV\!&&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:D]dcicicicicicicicicicicicicicicicicicicicicicicicicicicicicici69x'-'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:DW^ciciciciciciciciciciciciciciciciciciciciciaf;>%+&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:DJTbhciciciciciciciciciciciciciciciciciciciciciTY 07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:Frcicicici`fNV4Ce(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BS[ciciciciciciciciciciciciciciciciciciciFJ %&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:FrciciciciciciciX`CN*;H(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;FRYcicicicicicicicicicicicicicicicicicici_d2'-'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B+XBMV^bhciciciciciciciciciciciciciciciciciciciciciciciQV /5'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BP*;F.=Q1?]6Be9En>I{FQOWV]\ccicicicicicicicicicicicicicicicicicicicicicicicicicicicicicibg46s"18(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:FrciciciciciciciciciciciciciciciciciciciciciciciciciciahZaRZLUEO=Jy5Ch2@]->Q+I{`gcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici^d,.c)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:Frcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici[`:%+&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:FrciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciZ`!H"3:(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B!07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:FrciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciRW)"29(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B`ecicicicicicicicicicicicicicicici9<|)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B[bcicicicicicicicicicicicicicicicicicicici I /6'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A /6%FKbhcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici^e;?)/&8?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:Frcicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicicici]c,/e #3;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B:FrciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciW\(*\!'&7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:D:FqLUYabhciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciY^7;y $5<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.>SBMQZ]dciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciciUZ15n "29(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=&8?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMcicicicicicicicicicicicicicicici59v(.'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A$5<!.1fAEQV\bcicicicicicicicicicicicicicicicicicicicicicicicici\bQVDG13n)"29'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#4;##N8<{GKRW[`bhcicicicicicicicicicicicicicicicicicicicicicici`fV\JO8<{; !07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3;!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BZacicicicicicicicicicicicicicici]b#4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B&7?'-)+-_9=CHLPRXW]Za^e`fagcicibhag`e]bY_VZPUJNBG8;|*,] %%*$5=(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#4; &(U37q?BHLPUTYY]]b_eafbhciag`f^d\bZ^TZNSGK?D48s I "29'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3;!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3;!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B4AabhciciciciciciciciciciciciciciciRW %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B&8@"29!"29&8?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#4;!18'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3;!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BNXcicicicicicicicicicicicicicicici67u(.'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A&7?.5  /6%7>(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#4;,3%6>(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3;!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B.=Qagcicicicicicicicicicicicicicici]c#4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A%7>-3  /6%6>'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A!07%*  '-$5<'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3;!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BIRciciciciciciciciciciciciciciciciEI$&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&7> /6# #("29&7>'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&8@%6>#4;+2$ )0$5<'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3;!&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B )/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;F]dcicicicicicicicicicicicicicicibhF 07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&7?#4;(. !-3$5=&8?(:A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&7?%6>"2:*0# $.5%6='8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A%6=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=&7>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B%6>$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=&8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BBMciciciciciciciciciciciciciciciciRW %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'8@%7>"3:(. &-4$5<&7?'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:A'8@&7?%6>#3:,2"'  ",2$5<&7?'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BY_cicicicicicicicicicicicicicicici48s(.'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'8@&7>$5=/5&,  "'+2#3:%6>&7?'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A&8?%7>%6="18+1"( !(."18%6=&7?'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B9Grcicicicicicicicicicicicicicicici]b$4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A'8@&7?%6>$4; /6)0$)#   #$))/.5#3;%6=%7>&8?'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(9A'9@&8?&7>%6>$5&7?'8@(9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BT\ciciciciciciciciciciciciciciciciEH$&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A'8@&8@&7?&7>%6>%6>%6=%5=$5=$5=$5=$5=$5=%5=%6=%6>%6>&7>&7?&8?'8@'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A'9A'8@&8?&7?%7>%6>%6=%6=%5=$5=$5=$5=%5=%6=%6=%6>%6>&7?&7?&8@'9@'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B2A^bhcicicicicicicicicicicicicicicibhF 07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BNWciciciciciciciciciciciciciciciciRV %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B,(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B7Focicicicicicicicicicicicicicicicici37p)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BR[cicicicicicicicicicicicicicicici]b$4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B2@[bhciciciciciciciciciciciciciciciciEI %&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BMVcicicicicicicicicicicicicicicicibhB 07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B,(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BFPcicicicicicicicicicicicicicicicici45q)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B]bcicicicicicicicicicicicicicicici\b$4;(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B?J~ciciciciciciciciciciciciciciciciciCH %&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BW^cicicicicicicicicicicicicicicicibh@!07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B7CiciciciciciciciciciciciciciciciciciQV %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BQZcicicicicicicicicicicicicicicicici26p)/'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B/?Vchcicicicicicicicicicicicicicicici\b $4<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:BKTciciciciciciciciciciciciciciciciciCH %&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B*;H_ecicicicicicicicicicicicicicicicibh@!07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'9A  %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B 07)0'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B"$4<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#3:  %&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B#(!07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B%6>  %6>(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(.*0'8@(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B'8@ $4<(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B-3 &&7?(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:A!07'9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B%6>$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5=$5='9A(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B(:B ================================================ FILE: linux_os/part8/src/base.mk ================================================ SHELL ?= /bin/sh CC ?= gcc FLAGS ?= -nostdlib -I../include MYOS_PATH ?= /mnt/myos DESTDIR ?= /mnt/myos PREFIX ?= $(DESTDIR) BINDIR ?= $(PREFIX)/sbin OBJECTS += ../crt0_s.o %_c.o: %.c $(CC) $(FLAGS) -c $< -o $@ %_s.o: %.S $(CC) $(FLAGS) -c $< -o $@ install: cp $(TARGET) $(BINDIR)/ clean: rm *.o $(TARGET) ================================================ FILE: linux_os/part8/src/fbset/Makefile ================================================ TARGET=fbset CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -lfb -L$(MYOS_PATH)/lib BINDIR = $(PREFIX)/bin all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part8/src/fbset/fbset.c ================================================ #include #include #include #include #include "printf.h" int fill_fb(void *pbuffer, struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi, uint32_t color) { for (int x=0; xxres; x++) { for (int y=0; yyres; y++) { int location = (x + vi->xoffset) * (vi->bits_per_pixel / 8) + (y + vi->yoffset) * fi->line_length; uint32_t *pb = (uint32_t*)(pbuffer + location); *pb = color; } } } int main(int argc, char **argv) { printf("Frame Buffer Setting...\n"); if (argc < 3) { printf("Usage: fbset \n"); return -1; } int fdcon = sys_open("/dev/console", O_RDWR); struct fb_var_screeninfo vi; struct fb_fix_screeninfo fi; fb_get_info(&vi, &fi); int xres = str_to_int(argv[1]); int yres = str_to_int(argv[2]); printf("Current resolution: %dx%d\n", vi.xres, vi.yres); printf("Setting resolution: %dx%d\n", xres, yres); vi.xres = vi.xres_virtual = xres; vi.yres = vi.yres_virtual = yres; if (fb_put_info(&vi) != FB_SUCCESS) { printf("FAILED TO SET BUFFER: %d", errno); return -1; } void *pbuffer = fb_get_buffer(); if (fb_get_info(&vi, &fi) != FB_SUCCESS) { printf("FAILED TO GET VIDEO INFO: %d\n", errno); return -1; } sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFFFFFFFF); sleep_sec(2); sys_ioctl(fdcon, KDSETMODE, (void*)KD_GRAPHICS); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFFFF0000); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFF00FF00); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFF0000FF); sleep_sec(2); sys_ioctl(fdcon, KDSETMODE, (void*)KD_TEXT); return 0; } ================================================ FILE: linux_os/part8/src/include/libfb.h ================================================ #include #include #define FB_ERR_NOFB0 -1 #define FB_ERR_GETINFO -2 #define FB_ERR_PUTINFO -3 #define FB_ERR_MMAP -4 #define FB_SUCCESS 0 int fb_get_info(struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi); int fb_put_info(struct fb_var_screeninfo *vi); void *fb_get_buffer(); ================================================ FILE: linux_os/part8/src/include/mylib.h ================================================ #pragma once #include #include #include #include #include #include #include #include #include #include extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); extern int str_pos(char *s, char c); extern unsigned long hex_str_to_ulong(char *s); extern int str_to_int(char *s); extern void *sys_brk(void *p); extern int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); extern void *mem_alloc(int size); extern void mem_set(void *p, char n, size_t size); extern void mem_copy(void *dest, void *source, size_t size); extern void str_copy(char *dest, char *source); extern void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); extern int sys_munmap(void *addr, size_t length); extern void *malloc(size_t size); extern void free(void *addr); extern int sys_stat(const char *pathname, struct stat *statbuf); extern int sys_close(unsigned long fd); extern int sys_ioctl(unsigned long fd, unsigned long cmd, void *arg); extern int sys_waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); ================================================ FILE: linux_os/part8/src/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: linux_os/part8/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -lfb -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part8/src/init/crt0.S ================================================ .globl _start _start: # _start is the entry point known to the linker xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit) lea 8(%rsp), %rsi # take the address of argv from the stack lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack xor %eax, %eax # per ABI and compatibility with icc call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main mov %eax, %edi # transfer the return of main to the first argument of _exit xor %eax, %eax # per ABI and compatibility with icc call _exit # terminate the program ================================================ FILE: linux_os/part8/src/init/init.c ================================================ #include #include #include #include #include uint32_t fix_color(uint32_t num) { return (num & 0xFF00FF00) | ((num & 0xFF) << 16) | ((num >> 16) & 0xFF); } int main() { int fdcon = sys_open("/dev/console", O_RDWR); sys_ioctl(fdcon, KDSETMODE, (void *)KD_GRAPHICS); struct fb_var_screeninfo vi; struct fb_fix_screeninfo fi; fb_get_info(&vi, &fi); vi.xres = vi.xres_virtual = 1024; vi.yres = vi.yres_virtual = 768; //add error handling here normally... fb_put_info(&vi); void *pbuffer = fb_get_buffer(); int fd = sys_open("/etc/myos.img", O_RDONLY); int buff_size = sizeof(int) * 1024 * 768; int *buff = malloc(buff_size); sys_read(fd, buff, buff_size); sys_close(fd); int i = 0; for (int y=0; y #include #include "printf.h" #include unsigned long console_fd = 0; struct event_file { struct event_file *next; int fd; char name[64]; }; struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; struct mouse_pos_info { int x; int y; int max_x; int max_y; }; struct mouse_pos_info mouse_pos; struct event_file *event_list_head; void load_event_devices() { printf("Loading Input Devices...\n"); event_list_head = NULL; mouse_pos.x = 0; mouse_pos.y = 0; mouse_pos.max_x = 1024; mouse_pos.max_y = 768; for (int i=0; i<10; i++) { char name[64]; sprintf(name, "/dev/input/event%d", i); int fd = sys_open(name, O_RDONLY); if (fd < 0) { //not found break; } struct event_file *e = malloc(sizeof(struct event_file)); str_copy(e->name, name); e->fd = fd; e->next = event_list_head; event_list_head = e; } } bool handle_event(struct event_file *e, struct input_event *event) { if (event->type == EV_REL) { //mouse relative event. if (event->code == REL_X) { //mouse X event int new_x = mouse_pos.x + event->value; if (new_x >= 0 && new_x <= mouse_pos.max_x) { mouse_pos.x = new_x; } } if (event->code == REL_Y) { //mouse y event int new_y = mouse_pos.y + event->value; if (new_y >= 0 && new_y <= mouse_pos.max_y) { mouse_pos.y = new_y; } } printf("\rMOUSE_POS: %d - %d ", mouse_pos.x, mouse_pos.y); } if (event->type == EV_KEY) { printf("KEY_INPUT: %s - %d - %d - %d\n", e->name, event->code, event->type, event->value); if (event->code == KEY_END) { printf("Exiting.\n"); return true; } } return false; } void handle_events() { printf("Listening for events...\n"); while(true) { fd_set fds; FD_ZERO(&fds); struct event_file *e = event_list_head; while(e) { FD_SET(e->fd, &fds); e = e->next; } int ret = sys_select(event_list_head->fd + 1, &fds, NULL, NULL, NULL); if (ret < 0) { printf("SELECT FAILED!\n"); return; } e = event_list_head; while(e) { if (FD_ISSET(e->fd, &fds)) { char buffer[1024]; int r = sys_read(e->fd, buffer, sizeof(buffer)); int pos = 0; while(pos < r) { struct input_event *event = (struct input_event *)(buffer + pos); pos += sizeof(struct input_event); if (handle_event(e, event)) { return; } } } e = e->next; } } } void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); if (str_eq("", buff)) { str_print(" :> "); continue; } if (!process_command(buff)) { return 0; } str_print(" :> "); } } ================================================ FILE: linux_os/part8/src/libfb/Makefile ================================================ LDFLAGS = -shared TARGET = libfb.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part8/src/libfb/fb.c ================================================ #include #include #include #include int fb_get_info(struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi) { int fd = sys_open("/dev/fb0", O_RDONLY); if (fd < 0) { errno = fd; return FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOGET_VSCREENINFO, vi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_GETINFO; } if ((ret = sys_ioctl(fd, FBIOGET_FSCREENINFO, fi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_GETINFO; } sys_close(fd); return FB_SUCCESS; } int fb_put_info(struct fb_var_screeninfo *vi) { int fd = sys_open("/dev/fb0", O_RDWR); if (fd < 0) { errno = fd; return FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOPUT_VSCREENINFO, vi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_PUTINFO; } sys_close(fd); return FB_SUCCESS; } void *fb_get_buffer() { struct fb_fix_screeninfo fi; int fd = sys_open("/dev/fb0", O_RDWR); if (fd < 0) { errno = fd; return (void *)FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOGET_FSCREENINFO, &fi)) < 0) { errno = ret; sys_close(fd); return (void *)FB_ERR_GETINFO; } void *fb = sys_mmap(0, fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); sys_close(fd); return fb; } ================================================ FILE: linux_os/part8/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part8/src/mylib/mem.c ================================================ #include #include "printf.h" #define DEBUG_MEM 1 #define FLAG_MEM_ALLOCATED 1 #define FLAG_MEM_MAPPED 2 static const int PAGE_SIZE = 4096; static const int RESIZE_THRESHOLD = 16; static const int MMAP_THRESHOLD = 128 * 1024; static const int HEADER_SIZE = 4; static const int HEADER_FULL_SIZE = HEADER_SIZE * 2; static uint32_t HEADER_SIZE_MASK = 0xFFFFFFF8; static uint32_t HEADER_FLAGS_MASK = 7; //0111 /* CHUNK_HEADER { size: 29-bits - 8 bit aligned flags: 3-bits } HEAP CHUNK = { header: 4 bytes data: $size bytes header: 4 bytes } MMAP CHUNK = { header: 4 bytes data: $size bytes } Header Flags: Bit 0 - 0 = free, 1 = allocated Bit 1 - 0 = heap, 1 = mmap Bit 2 - reserved. Heap Layout: |-H1-SIZE-FLAGS-| < heap start, first chunk header. |---------------| |---------------| |---------------| |---------------| |-H1-SIZE-FLAGS-| < first chunk header |-H2-SIZE-FLAGS-| < second chunk header |---------------| |---------------| |---------------| |---------------| |-H2-SIZE-FLAGS-| < second chunk header |---------------| < heap end (current brk value) */ static uint8_t *p_heap_start = NULL; static uint8_t *p_first_free = NULL; static uint8_t *p_heap_end = NULL; #define P_AS_U32(p) ((uint32_t*)p) static inline uint32_t chunk_size(uint8_t *p) { return *P_AS_U32(p) & HEADER_SIZE_MASK; } static inline bool is_chunk_alloc(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_ALLOCATED; } static inline bool is_chunk_free(uint8_t *p) { return !is_chunk_alloc(p); } static inline bool is_chunk_mapped(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_MAPPED; } static inline uint8_t *next_chunk(uint8_t *p) { return (p + chunk_size(p) + HEADER_FULL_SIZE); } static inline uint8_t *chunk_set_size(uint8_t *p, size_t size) { *P_AS_U32(p) = size; *P_AS_U32((p + size + HEADER_SIZE)) = size; return p; } static inline uint8_t *chunk_set_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) |= flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) |= flags; return p; } static inline uint8_t *chunk_unset_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) &= ~flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) &= ~flags; return p; } static inline size_t align_8(size_t size) { uint32_t flags = size & HEADER_FLAGS_MASK; return flags ? size + 8 - flags : size; } static void init_heap() { p_heap_start = sys_brk(NULL); p_heap_end = p_heap_start + PAGE_SIZE; sys_brk(p_heap_end); //the first free entry is at the start of the heap... p_first_free = p_heap_start; //nothing allocated yet, so set size full... chunk_set_size(p_first_free, PAGE_SIZE - HEADER_FULL_SIZE); if (DEBUG_MEM) { printf("MEM: Init Heap:\n"); printf("MEM: \tStart: %lX\n", p_heap_start); printf("MEM: \tEnd : %lX\n", p_heap_end); printf("MEM: \tFirst Size: %ld\n", chunk_size(p_first_free)); printf("MEM: \tHeap Size: %ld\n", p_heap_end - p_heap_start); } } void print_heap() { if (!DEBUG_MEM) { return; } if (!p_heap_start) { init_heap(); } printf("MEM: Heap Info %lX to %lX (%ld):\n", p_heap_start, p_heap_end, p_heap_end - p_heap_start); uint8_t *p = p_heap_start; while(p < p_heap_end) { printf("\tMEM: %lX Size: %d - %s\n", p, chunk_size(p), is_chunk_free(p) ? "FREE" : "ALLOC"); p = next_chunk(p); } } static uint8_t *find_first_fit(size_t size) { for (uint8_t *p = p_first_free; p < p_heap_end; p = next_chunk(p)) { if (is_chunk_free(p) && chunk_size(p) >= size) { return p; } } return NULL; //need more memory. } static uint8_t *alloc_new_memory(size_t in_size) { int num_pages = (in_size / PAGE_SIZE) + 1; if (in_size % PAGE_SIZE < HEADER_FULL_SIZE) { //there is enough space for buffer, but not buffer + headers. num_pages++; } size_t size = num_pages * PAGE_SIZE; char *prev_end = p_heap_end; p_heap_end = sys_brk(p_heap_end + size); return chunk_set_size(prev_end, size - HEADER_FULL_SIZE); } void *malloc(size_t in_size) { if (!p_heap_start) { init_heap(); } if (in_size >= MMAP_THRESHOLD) { //not going to use heap, actually use mmap instead... uint8_t *p = sys_mmap(NULL, in_size + HEADER_SIZE_MASK, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); chunk_set_size(p, in_size); chunk_set_flags(p, FLAG_MEM_MAPPED | FLAG_MEM_ALLOCATED); //user's pointer starts just past the header. return p + HEADER_SIZE; } //not mmap, use heap instead. //8 bit align the size... size_t size = align_8(in_size); uint8_t *p = find_first_fit(size); if (p == NULL) { p = alloc_new_memory(size); } size_t csize = chunk_size(p); size_t diff = csize - size; if (diff > RESIZE_THRESHOLD) { size_t next_size = diff - HEADER_FULL_SIZE; chunk_set_size(p, size); chunk_set_size(next_chunk(p), next_size); } chunk_set_flags(p, FLAG_MEM_ALLOCATED); return p + HEADER_SIZE; } void free(void *up) { uint8_t *p = ((uint8_t *)up) - HEADER_SIZE; if (is_chunk_mapped(p)) { //it was not on the heap, unmap it. int ret = sys_munmap(p, chunk_size(p) + HEADER_SIZE); if (DEBUG_MEM) { printf("MEM: free mapped, returned %d\n", ret); } return; } chunk_unset_flags(p, FLAG_MEM_ALLOCATED); if (is_chunk_free(next_chunk(p))) { //if next chunk is free, let's merge them. size_t new_size = chunk_size(p) + chunk_size(next_chunk(p)) + HEADER_FULL_SIZE; chunk_set_size(p, new_size); } if (next_chunk(p) >= p_heap_end) { //we are on the last chunk on the heap, let's do some actual //freeing of memory and move the brk back some. p_heap_end = sys_brk(p); } if (p < p_first_free) { p_first_free = p; } } ================================================ FILE: linux_os/part8/src/mylib/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include #include typedef void (*putcf) (void*,char); static putcf stdout_putf = NULL; static void* stdout_putp = NULL; #define PRINTF_LONG_SUPPORT 1 #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned long int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } extern unsigned long printf_fd = 0; void putc_console(void *p, char c) { sys_write(printf_fd, &c, 1); } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); if (stdout_putf == NULL) { printf_fd = sys_open("/dev/console", O_WRONLY | O_NDELAY); stdout_putf = putc_console; } tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: linux_os/part8/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part8/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } /* .text .data .bss heap invalid stack [--------|-------|-------|---------|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX|-----] ^ brk (0x1FC1000) brk(0) = 0x1FC0000 brk(0x1FC0000 + 0x1000) = 0x1FC1000 */ void *sys_brk(void *p) { return _syscall(SYS_brk, p, 0, 0, 0, 0, 0); } int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { return _syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout, 0); } void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) { return _syscall(SYS_mmap, addr, length, prot, flags, fd, offset); } int sys_munmap(void *addr, size_t length) { return _syscall(SYS_munmap, addr, length, 0, 0, 0, 0); } int sys_stat(const char *pathname, struct stat *statbuf) { return _syscall(SYS_stat, pathname, statbuf, 0, 0, 0, 0); } int sys_close(unsigned long fd) { return _syscall(SYS_close, fd, 0, 0, 0, 0, 0); } int sys_ioctl(unsigned long fd, unsigned long cmd, void *arg) { return _syscall(SYS_ioctl, fd, cmd, arg, 0, 0, 0); } int sys_waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options) { return _syscall(SYS_waitid, (unsigned long)idtype, id, infop, options, 0, 0); } ================================================ FILE: linux_os/part8/src/mylib/util.c ================================================ #include #include #include "printf.h" unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include "printf.h" int main(int argc, char **argv) { printf("PrintArgs: %d\n", argc); for (int i=1; i #include #include int main(int argc, char **argv) { printf("DRM modes:\n"); int fd = mydrm_open("/dev/dri/card0"); struct drm_mode_card_res res; if (mydrm_get_resources(fd, &res)) { printf("Failed to open card0 resources\n"); return -1; } printf("DRM Connectors: %d\n", res.count_connectors); sleep_sec(1); for (int i=0; i #include #include #include #include "printf.h" int fill_fb(void *pbuffer, struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi, uint32_t color) { for (int x=0; xxres; x++) { for (int y=0; yyres; y++) { int location = (x + vi->xoffset) * (vi->bits_per_pixel / 8) + (y + vi->yoffset) * fi->line_length; uint32_t *pb = (uint32_t*)(pbuffer + location); *pb = color; } } } int main(int argc, char **argv) { printf("Frame Buffer Setting...\n"); if (argc < 3) { printf("Usage: fbset \n"); return -1; } int fdcon = sys_open("/dev/console", O_RDWR); struct fb_var_screeninfo vi; struct fb_fix_screeninfo fi; fb_get_info(&vi, &fi); int xres = str_to_int(argv[1]); int yres = str_to_int(argv[2]); printf("Current resolution: %dx%d\n", vi.xres, vi.yres); printf("Setting resolution: %dx%d\n", xres, yres); vi.xres = vi.xres_virtual = xres; vi.yres = vi.yres_virtual = yres; if (fb_put_info(&vi) != FB_SUCCESS) { printf("FAILED TO SET BUFFER: %d", errno); return -1; } void *pbuffer = fb_get_buffer(); if (fb_get_info(&vi, &fi) != FB_SUCCESS) { printf("FAILED TO GET VIDEO INFO: %d\n", errno); return -1; } sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFFFFFFFF); sleep_sec(2); sys_ioctl(fdcon, KDSETMODE, (void*)KD_GRAPHICS); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFFFF0000); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFF00FF00); sleep_sec(2); fill_fb(pbuffer, &vi, &fi, 0xFF0000FF); sleep_sec(2); sys_ioctl(fdcon, KDSETMODE, (void*)KD_TEXT); return 0; } ================================================ FILE: linux_os/part9/src/include/libfb.h ================================================ #include #include #define FB_ERR_NOFB0 -1 #define FB_ERR_GETINFO -2 #define FB_ERR_PUTINFO -3 #define FB_ERR_MMAP -4 #define FB_SUCCESS 0 int fb_get_info(struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi); int fb_put_info(struct fb_var_screeninfo *vi); void *fb_get_buffer(); ================================================ FILE: linux_os/part9/src/include/mydrm.h ================================================ #pragma once #include #include #include #include struct mydrm_get_cap { uint64_t capability; uint64_t value; }; enum mydrm_modes { DRM_MODE_CONNECTED = 1, DRM_MODE_DISCONNECTED = 2, DRM_MODE_UNKNOWN = 3 }; extern int mydrm_ioctl(int fd, unsigned long request, void *arg); extern int mydrm_open(const char *device_node); extern int mydrm_get_resources(int fd, struct drm_mode_card_res *res); extern int mydrm_get_connector(int fd, int id, struct drm_mode_get_connector *conn); ================================================ FILE: linux_os/part9/src/include/mylib.h ================================================ #pragma once #include #include #include #include #include #include #include #include #include #include extern unsigned long _syscall(int num, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5); extern unsigned long sys_open(char *fn, int flags); extern unsigned long sys_read(unsigned long fd, char *buff, unsigned long size); extern unsigned long sys_reboot(); unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem); extern unsigned long str_len(char *sz); extern void str_print(char *str); extern void delay(int ticks); extern void sleep_sec(int sec); extern int str_eq(char *a, char *b); extern unsigned long sys_write(unsigned long fd, char *buf, unsigned long len); extern long sys_fork(); extern long sys_execve(char *filename, char **argv, char **envp); extern int execute_process(char *filename); extern int str_pos(char *s, char c); extern unsigned long hex_str_to_ulong(char *s); extern int str_to_int(char *s); extern void *sys_brk(void *p); extern int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); extern void *mem_alloc(int size); extern void mem_set(void *p, char n, size_t size); extern void mem_copy(void *dest, void *source, size_t size); extern void str_copy(char *dest, char *source); extern void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); extern int sys_munmap(void *addr, size_t length); extern void *malloc(size_t size); extern void free(void *addr); extern int sys_stat(const char *pathname, struct stat *statbuf); extern int sys_close(unsigned long fd); extern int sys_ioctl(unsigned long fd, unsigned long cmd, void *arg); extern int sys_waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); ================================================ FILE: linux_os/part9/src/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: linux_os/part9/src/init/Makefile ================================================ TARGET=init CSOURCES = $(shell echo *.c) OBJECTS = $(CSOURCES:.c=_c.o) LDFLAGS = -lmy -lfb -L$(MYOS_PATH)/lib all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(FLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part9/src/init/crt0.S ================================================ .globl _start _start: # _start is the entry point known to the linker xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit) lea 8(%rsp), %rsi # take the address of argv from the stack lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack xor %eax, %eax # per ABI and compatibility with icc call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main mov %eax, %edi # transfer the return of main to the first argument of _exit xor %eax, %eax # per ABI and compatibility with icc call _exit # terminate the program ================================================ FILE: linux_os/part9/src/init/init.c ================================================ #include #include #include #include #include uint32_t fix_color(uint32_t num) { return (num & 0xFF00FF00) | ((num & 0xFF) << 16) | ((num >> 16) & 0xFF); } int main() { int fdcon = sys_open("/dev/console", O_RDWR); sys_ioctl(fdcon, KDSETMODE, (void *)KD_GRAPHICS); struct fb_var_screeninfo vi; struct fb_fix_screeninfo fi; fb_get_info(&vi, &fi); vi.xres = vi.xres_virtual = 1024; vi.yres = vi.yres_virtual = 768; //add error handling here normally... fb_put_info(&vi); void *pbuffer = fb_get_buffer(); int fd = sys_open("/etc/myos.img", O_RDONLY); int buff_size = sizeof(int) * 1024 * 768; int *buff = malloc(buff_size); sys_read(fd, buff, buff_size); sys_close(fd); int i = 0; for (int y=0; y #include #include "printf.h" #include unsigned long console_fd = 0; struct event_file { struct event_file *next; int fd; char name[64]; }; struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; struct mouse_pos_info { int x; int y; int max_x; int max_y; }; struct mouse_pos_info mouse_pos; struct event_file *event_list_head; void load_event_devices() { printf("Loading Input Devices...\n"); event_list_head = NULL; mouse_pos.x = 0; mouse_pos.y = 0; mouse_pos.max_x = 1024; mouse_pos.max_y = 768; for (int i=0; i<10; i++) { char name[64]; sprintf(name, "/dev/input/event%d", i); int fd = sys_open(name, O_RDONLY); if (fd < 0) { //not found break; } struct event_file *e = malloc(sizeof(struct event_file)); str_copy(e->name, name); e->fd = fd; e->next = event_list_head; event_list_head = e; } } bool handle_event(struct event_file *e, struct input_event *event) { if (event->type == EV_REL) { //mouse relative event. if (event->code == REL_X) { //mouse X event int new_x = mouse_pos.x + event->value; if (new_x >= 0 && new_x <= mouse_pos.max_x) { mouse_pos.x = new_x; } } if (event->code == REL_Y) { //mouse y event int new_y = mouse_pos.y + event->value; if (new_y >= 0 && new_y <= mouse_pos.max_y) { mouse_pos.y = new_y; } } printf("\rMOUSE_POS: %d - %d ", mouse_pos.x, mouse_pos.y); } if (event->type == EV_KEY) { printf("KEY_INPUT: %s - %d - %d - %d\n", e->name, event->code, event->type, event->value); if (event->code == KEY_END) { printf("Exiting.\n"); return true; } } return false; } void handle_events() { printf("Listening for events...\n"); while(true) { fd_set fds; FD_ZERO(&fds); struct event_file *e = event_list_head; while(e) { FD_SET(e->fd, &fds); e = e->next; } int ret = sys_select(event_list_head->fd + 1, &fds, NULL, NULL, NULL); if (ret < 0) { printf("SELECT FAILED!\n"); return; } e = event_list_head; while(e) { if (FD_ISSET(e->fd, &fds)) { char buffer[1024]; int r = sys_read(e->fd, buffer, sizeof(buffer)); int pos = 0; while(pos < r) { struct input_event *event = (struct input_event *)(buffer + pos); pos += sizeof(struct input_event); if (handle_event(e, event)) { return; } } } e = e->next; } } } void console_open() { console_fd = sys_open("/dev/console", O_RDWR | O_NDELAY); } char console_read() { char c = 0; while(!sys_read(console_fd, &c, 1)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 10000; sys_nanosleep(&ts, NULL); } return c; } void console_write(char c) { sys_write(console_fd, &c, 1); } int read_line(char *buff, int max) { int i=0; for (; i "); while(1) { char buff[1024]; read_line(buff, sizeof(buff)); if (str_eq("", buff)) { str_print(" :> "); continue; } if (!process_command(buff)) { return 0; } str_print(" :> "); } } ================================================ FILE: linux_os/part9/src/libfb/Makefile ================================================ LDFLAGS = -shared TARGET = libfb.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part9/src/libfb/fb.c ================================================ #include #include #include #include int fb_get_info(struct fb_var_screeninfo *vi, struct fb_fix_screeninfo *fi) { int fd = sys_open("/dev/fb0", O_RDONLY); if (fd < 0) { errno = fd; return FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOGET_VSCREENINFO, vi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_GETINFO; } if ((ret = sys_ioctl(fd, FBIOGET_FSCREENINFO, fi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_GETINFO; } sys_close(fd); return FB_SUCCESS; } int fb_put_info(struct fb_var_screeninfo *vi) { int fd = sys_open("/dev/fb0", O_RDWR); if (fd < 0) { errno = fd; return FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOPUT_VSCREENINFO, vi)) < 0) { errno = ret; sys_close(fd); return FB_ERR_PUTINFO; } sys_close(fd); return FB_SUCCESS; } void *fb_get_buffer() { struct fb_fix_screeninfo fi; int fd = sys_open("/dev/fb0", O_RDWR); if (fd < 0) { errno = fd; return (void *)FB_ERR_NOFB0; } int ret; if ((ret = sys_ioctl(fd, FBIOGET_FSCREENINFO, &fi)) < 0) { errno = ret; sys_close(fd); return (void *)FB_ERR_GETINFO; } void *fb = sys_mmap(0, fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); sys_close(fd); return fb; } ================================================ FILE: linux_os/part9/src/mydrm/Makefile ================================================ LDFLAGS = -shared TARGET = libmydrm.so CSOURCES = $(shell echo *.c) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part9/src/mydrm/mydrm.c ================================================ #include #include #include #include #ifndef O_CLOEXEC #define O_CLOEXEC 02000000 #endif int mydrm_ioctl(int fd, unsigned long request, void *arg) { int ret; do { ret = sys_ioctl(fd, request, arg); } while(ret == -EINTR || ret == -EAGAIN); return ret; } //opening a device such as /dev/dri/card0 int mydrm_open(const char *device_node) { int fd = sys_open((char *)device_node, O_RDWR | O_CLOEXEC); if (fd < 0) { return fd; } struct mydrm_get_cap get_cap = { .capability = DRM_CAP_DUMB_BUFFER, .value = 0 }; if (mydrm_ioctl(fd, DRM_IOCTL_GET_CAP, &get_cap) < 0 || !get_cap.value) { return -EOPNOTSUPP; } return fd; } int mydrm_get_resources(int fd, struct drm_mode_card_res *res) { mem_set(res, 0, sizeof(struct drm_mode_card_res)); int ior = 0; if (mydrm_ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, res)) { return -1; } if (res->count_fbs) { res->fb_id_ptr = (uint64_t)malloc(res->count_fbs * sizeof(uint32_t)); mem_set((void *)res->fb_id_ptr, 0, res->count_fbs * sizeof(uint32_t)); } if (res->count_crtcs) { res->crtc_id_ptr = (uint64_t)malloc(res->count_crtcs * sizeof(uint32_t)); mem_set((void *)res->crtc_id_ptr, 0, res->count_crtcs * sizeof(uint32_t)); } if (res->count_connectors) { res->connector_id_ptr = (uint64_t)malloc(res->count_connectors * sizeof(uint32_t)); mem_set((void *)res->connector_id_ptr, 0, res->count_connectors * sizeof(uint32_t)); } if (res->count_encoders) { res->encoder_id_ptr = (uint64_t)malloc(res->count_encoders * sizeof(uint32_t)); mem_set((void *)res->encoder_id_ptr, 0, res->count_encoders * sizeof(uint32_t)); } ior = mydrm_ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, res); if (ior) { return -1; } return 0; } int mydrm_get_connector(int fd, int id, struct drm_mode_get_connector *conn) { mem_set(conn, 0, sizeof(struct drm_mode_get_connector)); conn->connector_id = id; if (mydrm_ioctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, conn)) { return -1; } if (conn->count_props) { conn->props_ptr = (uint64_t)malloc(conn->count_props * sizeof(uint32_t)); conn->prop_values_ptr = (uint64_t)malloc(conn->count_props * sizeof(uint64_t)); } if (conn->count_modes) { conn->modes_ptr = (uint64_t)malloc(conn->count_modes * sizeof(struct drm_mode_modeinfo)); } if (conn->count_encoders) { conn->encoders_ptr = (uint64_t)malloc(conn->count_encoders * sizeof(uint32_t)); } if (mydrm_ioctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, conn)) { return -1; } return 0; } ================================================ FILE: linux_os/part9/src/mylib/Makefile ================================================ LDFLAGS = -shared TARGET = libmy.so CSOURCES = $(shell echo *.c) SSOURCES = $(shell echo *.S) FLAGS = -nostdlib -I../include -fPIC OBJECTS = $(CSOURCES:.c=_c.o) OBJECTS += $(SSOURCES:.S=_s.o) BINDIR = $(PREFIX)/lib all: $(TARGET) $(TARGET): $(OBJECTS) ld $(FLAGS) $(LDFLAGS) -o $(TARGET) $(OBJECTS) include ../base.mk ================================================ FILE: linux_os/part9/src/mylib/mem.c ================================================ #include #include "printf.h" #define DEBUG_MEM 1 #define FLAG_MEM_ALLOCATED 1 #define FLAG_MEM_MAPPED 2 static const int PAGE_SIZE = 4096; static const int RESIZE_THRESHOLD = 16; static const int MMAP_THRESHOLD = 128 * 1024; static const int HEADER_SIZE = 4; static const int HEADER_FULL_SIZE = HEADER_SIZE * 2; static uint32_t HEADER_SIZE_MASK = 0xFFFFFFF8; static uint32_t HEADER_FLAGS_MASK = 7; //0111 /* CHUNK_HEADER { size: 29-bits - 8 bit aligned flags: 3-bits } HEAP CHUNK = { header: 4 bytes data: $size bytes header: 4 bytes } MMAP CHUNK = { header: 4 bytes data: $size bytes } Header Flags: Bit 0 - 0 = free, 1 = allocated Bit 1 - 0 = heap, 1 = mmap Bit 2 - reserved. Heap Layout: |-H1-SIZE-FLAGS-| < heap start, first chunk header. |---------------| |---------------| |---------------| |---------------| |-H1-SIZE-FLAGS-| < first chunk header |-H2-SIZE-FLAGS-| < second chunk header |---------------| |---------------| |---------------| |---------------| |-H2-SIZE-FLAGS-| < second chunk header |---------------| < heap end (current brk value) */ static uint8_t *p_heap_start = NULL; static uint8_t *p_first_free = NULL; static uint8_t *p_heap_end = NULL; #define P_AS_U32(p) ((uint32_t*)p) static inline uint32_t chunk_size(uint8_t *p) { return *P_AS_U32(p) & HEADER_SIZE_MASK; } static inline bool is_chunk_alloc(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_ALLOCATED; } static inline bool is_chunk_free(uint8_t *p) { return !is_chunk_alloc(p); } static inline bool is_chunk_mapped(uint8_t *p) { return *P_AS_U32(p) & FLAG_MEM_MAPPED; } static inline uint8_t *next_chunk(uint8_t *p) { return (p + chunk_size(p) + HEADER_FULL_SIZE); } static inline uint8_t *chunk_set_size(uint8_t *p, size_t size) { *P_AS_U32(p) = size; *P_AS_U32((p + size + HEADER_SIZE)) = size; return p; } static inline uint8_t *chunk_set_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) |= flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) |= flags; return p; } static inline uint8_t *chunk_unset_flags(uint8_t *p, uint32_t flags) { *P_AS_U32(p) &= ~flags; *P_AS_U32((p + chunk_size(p) + HEADER_SIZE)) &= ~flags; return p; } static inline size_t align_8(size_t size) { uint32_t flags = size & HEADER_FLAGS_MASK; return flags ? size + 8 - flags : size; } static void init_heap() { p_heap_start = sys_brk(NULL); p_heap_end = p_heap_start + PAGE_SIZE; sys_brk(p_heap_end); //the first free entry is at the start of the heap... p_first_free = p_heap_start; //nothing allocated yet, so set size full... chunk_set_size(p_first_free, PAGE_SIZE - HEADER_FULL_SIZE); if (DEBUG_MEM) { printf("MEM: Init Heap:\n"); printf("MEM: \tStart: %lX\n", p_heap_start); printf("MEM: \tEnd : %lX\n", p_heap_end); printf("MEM: \tFirst Size: %ld\n", chunk_size(p_first_free)); printf("MEM: \tHeap Size: %ld\n", p_heap_end - p_heap_start); } } void print_heap() { if (!DEBUG_MEM) { return; } if (!p_heap_start) { init_heap(); } printf("MEM: Heap Info %lX to %lX (%ld):\n", p_heap_start, p_heap_end, p_heap_end - p_heap_start); uint8_t *p = p_heap_start; while(p < p_heap_end) { printf("\tMEM: %lX Size: %d - %s\n", p, chunk_size(p), is_chunk_free(p) ? "FREE" : "ALLOC"); p = next_chunk(p); } } static uint8_t *find_first_fit(size_t size) { for (uint8_t *p = p_first_free; p < p_heap_end; p = next_chunk(p)) { if (is_chunk_free(p) && chunk_size(p) >= size) { return p; } } return NULL; //need more memory. } static uint8_t *alloc_new_memory(size_t in_size) { int num_pages = (in_size / PAGE_SIZE) + 1; if (in_size % PAGE_SIZE < HEADER_FULL_SIZE) { //there is enough space for buffer, but not buffer + headers. num_pages++; } size_t size = num_pages * PAGE_SIZE; char *prev_end = p_heap_end; p_heap_end = sys_brk(p_heap_end + size); return chunk_set_size(prev_end, size - HEADER_FULL_SIZE); } void *malloc(size_t in_size) { if (!p_heap_start) { init_heap(); } if (in_size >= MMAP_THRESHOLD) { //not going to use heap, actually use mmap instead... uint8_t *p = sys_mmap(NULL, in_size + HEADER_SIZE_MASK, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); chunk_set_size(p, in_size); chunk_set_flags(p, FLAG_MEM_MAPPED | FLAG_MEM_ALLOCATED); //user's pointer starts just past the header. return p + HEADER_SIZE; } //not mmap, use heap instead. //8 bit align the size... size_t size = align_8(in_size); uint8_t *p = find_first_fit(size); if (p == NULL) { p = alloc_new_memory(size); } size_t csize = chunk_size(p); size_t diff = csize - size; if (diff > RESIZE_THRESHOLD) { size_t next_size = diff - HEADER_FULL_SIZE; chunk_set_size(p, size); chunk_set_size(next_chunk(p), next_size); } chunk_set_flags(p, FLAG_MEM_ALLOCATED); return p + HEADER_SIZE; } void free(void *up) { uint8_t *p = ((uint8_t *)up) - HEADER_SIZE; if (is_chunk_mapped(p)) { //it was not on the heap, unmap it. int ret = sys_munmap(p, chunk_size(p) + HEADER_SIZE); if (DEBUG_MEM) { printf("MEM: free mapped, returned %d\n", ret); } return; } chunk_unset_flags(p, FLAG_MEM_ALLOCATED); if (is_chunk_free(next_chunk(p))) { //if next chunk is free, let's merge them. size_t new_size = chunk_size(p) + chunk_size(next_chunk(p)) + HEADER_FULL_SIZE; chunk_set_size(p, new_size); } if (next_chunk(p) >= p_heap_end) { //we are on the last chunk on the heap, let's do some actual //freeing of memory and move the brk back some. p_heap_end = sys_brk(p); } if (p < p_first_free) { p_first_free = p; } } ================================================ FILE: linux_os/part9/src/mylib/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include #include typedef void (*putcf) (void*,char); static putcf stdout_putf = NULL; static void* stdout_putp = NULL; #define PRINTF_LONG_SUPPORT 1 #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned long int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } extern unsigned long printf_fd = 0; void putc_console(void *p, char c) { sys_write(printf_fd, &c, 1); } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); if (stdout_putf == NULL) { printf_fd = sys_open("/dev/console", O_WRONLY | O_NDELAY); stdout_putf = putc_console; } tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: linux_os/part9/src/mylib/start.S ================================================ .globl _syscall _syscall: movq %rdi, %rax movq %rsi, %rdi movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp), %r9 syscall ret ================================================ FILE: linux_os/part9/src/mylib/sys.c ================================================ #include #include unsigned long sys_open(char *fn, int flags) { return _syscall(SYS_open, fn, (void *)(long)flags, 0, 0, 0, 0); } unsigned long sys_read(unsigned long fd, char *buff, unsigned long size) { return _syscall(SYS_read, (void *)fd, buff, (void *)size, 0, 0, 0); } unsigned long sys_reboot() { return _syscall(SYS_reboot, (void *)0xfee1dead, (void *)672274793, (void*)0x1234567, 0, 0, 0); } unsigned long sys_nanosleep(struct timespec *req, struct timespec *rem) { return _syscall(SYS_nanosleep, req, rem, 0, 0, 0, 0); } void sleep_sec(int sec) { struct timespec tm; tm.tv_nsec = 0; tm.tv_sec = sec; sys_nanosleep(&tm, NULL); } unsigned long sys_write(unsigned long fd, char *buf, unsigned long len) { return _syscall(SYS_write, fd, buf, len, 0, 0, 0); } long sys_fork() { return _syscall(SYS_fork, 0, 0, 0, 0, 0, 0); } long sys_execve(char *filename, char **argv, char **envp) { return _syscall(SYS_execve, filename, argv, envp, 0, 0, 0); } int execute_process(char *filename) { long pid = sys_fork(); if (!pid) { char *argv[2]; argv[0] = filename; argv[1] = 0; char *envp[1]; envp[0] = 0; return sys_execve(filename, argv, envp); } } /* .text .data .bss heap invalid stack [--------|-------|-------|---------|XXXXXXXXXXXXXXXXXXXXXXXXXXXXX|-----] ^ brk (0x1FC1000) brk(0) = 0x1FC0000 brk(0x1FC0000 + 0x1000) = 0x1FC1000 */ void *sys_brk(void *p) { return _syscall(SYS_brk, p, 0, 0, 0, 0, 0); } int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { return _syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout, 0); } void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) { return _syscall(SYS_mmap, addr, length, prot, flags, fd, offset); } int sys_munmap(void *addr, size_t length) { return _syscall(SYS_munmap, addr, length, 0, 0, 0, 0); } int sys_stat(const char *pathname, struct stat *statbuf) { return _syscall(SYS_stat, pathname, statbuf, 0, 0, 0, 0); } int sys_close(unsigned long fd) { return _syscall(SYS_close, fd, 0, 0, 0, 0, 0); } int sys_ioctl(unsigned long fd, unsigned long cmd, void *arg) { return _syscall(SYS_ioctl, fd, cmd, arg, 0, 0, 0); } int sys_waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options) { return _syscall(SYS_waitid, (unsigned long)idtype, id, infop, options, 0, 0); } ================================================ FILE: linux_os/part9/src/mylib/util.c ================================================ #include #include #include "printf.h" unsigned long str_len(char *sz) { int count = 0; while(*sz++) { count++; } return count; } void delay(int ticks) { for (int i=0; i #include "printf.h" int main(int argc, char **argv) { printf("PrintArgs: %d\n", argc); for (int i=1; i int console_init(logger *self, void *data) { printf("Console Logger Init\n"); return 0; } void console_info(logger *self, char *str) { printf("%s\n", str); } void console_error(logger *self, char *str) { fprintf(stderr, "%s\n", str); } void console_close(logger *self) { } log_interface console_interface = { .init = console_init, .info = console_info, .error = console_error, .close = console_close }; logger conlog = { .interface = &console_interface }; ================================================ FILE: ooc/log_file.c ================================================ #include "log.h" #include #include #include int file_init(logger *self, void *data); void file_info(logger *self, char *str); void file_error(logger *self, char *str); void file_close(logger *self); log_interface file_interface = { .init = file_init, .info = file_info, .error = file_error, .close = file_close }; //hidden implementation details... typedef struct filelog_data_ { char *filename; FILE *fd; } filelog_data; int file_init(logger *self, void *data) { self->interface = &file_interface; self->data = data; filelog_data *fld = data; fld->fd = fopen(fld->filename, "w"); printf("File Logger Init: %s - %p\n", fld->filename, fld->fd); if (!fld->fd) { return errno; } return 0; } int filelog_create(logger *impl, char *filename) { filelog_data *data = malloc(sizeof(filelog_data)); if (!data) { return errno; } data->filename = filename; return file_init(impl, data); } void file_info(logger *self, char *str) { filelog_data *fld = self->data; fprintf(fld->fd, "INFO :> %s\n", str); } void file_error(logger *self, char *str) { filelog_data *fld = self->data; fprintf(fld->fd, "ERROR:> %s\n", str); } void file_close(logger *self) { filelog_data *fld = self->data; fclose(fld->fd); free(fld); } ================================================ FILE: ooc/main.c ================================================ #include "log.h" #include "flog.h" #include //macros for less typing... #define ILOG(log, msg) (log)->interface->info(log, msg) #define ELOG(log, msg) (log)->interface->error(log, msg) void do_something(logger *log) { //... ILOG(log, "Part 1"); //... ILOG(log, "Part 2"); //... if (1) { ELOG(log, "oops"); } } int main() { // //console log sample // log_interface *clog = conlog.interface; //not really necessary for console log, but... clog->init(&conlog, 0); //long winded usage conlog.interface->info(&conlog, "Info message 1"); conlog.interface->error(&conlog, "Error message 1"); //shorter usage clog->info((void *)clog, "Info message 2"); clog->error((void *)clog, "Error message 2"); //macro usage ILOG(&conlog, "Info message 3"); ELOG(&conlog, "Error message 3"); // //file log samples // //first setup 2 separate log files. logger f1; logger f2; //create the loggers... filelog_create(&f1, "file1.log"); filelog_create(&f2, "file2.log"); log_interface *flog1 = f1.interface; log_interface *flog2 = f2.interface; //shorter usage flog1->info(&f1, "Info message 1"); flog2->info(&f2, "Info message 1"); flog1->error(&f1, "Error message 1"); flog2->error(&f2, "Error message 1"); //macro usage ILOG(&f1, "Info message 2"); ILOG(&f2, "Info message 2"); ELOG(&f1, "Error message 2"); ELOG(&f2, "Error message 2"); flog1->close(&f1); flog2->close(&f2); do_something(&f1); return 0; } ================================================ FILE: pico/6502_part1/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.13) include(pico_sdk_import.cmake) project(test_project) pico_sdk_init() add_executable(test test.c test.S ) pico_enable_stdio_usb(test 1) pico_enable_stdio_uart(test 0) pico_add_extra_outputs(test) target_link_libraries(test pico_stdlib hardware_i2c) ================================================ FILE: pico/6502_part1/pico_sdk_import.cmake ================================================ # This is a copy of /external/pico_sdk_import.cmake # This can be dropped into an external project to help locate this SDK # It should be include()ed prior to project() if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") endif () if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") endif () if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") endif () set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") if (NOT PICO_SDK_PATH) if (PICO_SDK_FETCH_FROM_GIT) include(FetchContent) set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) if (PICO_SDK_FETCH_FROM_GIT_PATH) get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") endif () FetchContent_Declare( pico_sdk GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk GIT_TAG master ) if (NOT pico_sdk) message("Downloading Raspberry Pi Pico SDK") FetchContent_Populate(pico_sdk) set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) endif () set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) else () message(FATAL_ERROR "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." ) endif () endif () get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") if (NOT EXISTS ${PICO_SDK_PATH}) message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") endif () set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") endif () set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) include(${PICO_SDK_INIT_CMAKE_FILE}) ================================================ FILE: pico/6502_part1/test.c ================================================ #include "pico/stdlib.h" #include #include "hardware/i2c.h" #include "pico/binary_info.h" const uint BASE_BUS_ADDRESS = 0x8000; const uint BASE_MEM_ADDRESS = 0x1000; #define I2C_PORT i2c0 #define I2C_ADDR 0x20 //8 bytes of RAM static unsigned char MEM[] = {0, 0, 0, 0, 0, 0, 0, 0}; #define ADDR_TO_2BYTES(a) (a & 0xFF), ((a >> 8) & 0xFF) //CODE to run on the 6502 processor. static unsigned char CODE[] = { 0xA0, 0x00, //LDY $00 0x18, //CLC 0xB8, //CLV 0xA9, 0xF0, //LDA $F0 0x8D, ADDR_TO_2BYTES(BASE_MEM_ADDRESS), //STA 0x1000 0x6A, //ROR 0x8D, ADDR_TO_2BYTES(BASE_MEM_ADDRESS), //STA 0x1000 0x6A, //ROR 0x8D, ADDR_TO_2BYTES(BASE_MEM_ADDRESS), //STA 0x1000 0x6A, //ROR 0x8D, ADDR_TO_2BYTES(BASE_MEM_ADDRESS), //STA 0x1000 0x6A, //ROR 0x8D, ADDR_TO_2BYTES(BASE_MEM_ADDRESS), //STA 0x1000 0xAA, //TAX //transfer A to X 0x8E, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 1), //STX 0x1001 0xE8, //INX (x++) 0x8E, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 1), //STX 0x1001 0xE8, //INX (x++) 0x8E, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 1), //STX 0x1001 0xE8, //INX (x++) 0x8E, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 1), //STX 0x1001 0xE8, //INX (x++) 0x8E, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 1), //STX 0x1001 0xE8, //INX (x++) 0x8E, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 1), //STX 0x1001 0xE8, //INX (x++) 0x8E, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 1), //STX 0x1001 0xE8, //INX (x++) 0xC8, //INY (y++) 0x8C, ADDR_TO_2BYTES(BASE_MEM_ADDRESS + 2), //STY 0x1002 0x4C, ADDR_TO_2BYTES(BASE_BUS_ADDRESS + 4) }; const uint CLOCK = 9; const uint RW = 8; int addr_pins[] = { 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 15, 14, 13, 12, 11, 10 }; void write_data(uint8_t val) { if (i2c_write_blocking(I2C_PORT, I2C_ADDR, &val, 1, false) <= 0) { printf("FAILED TO WRITE TO I2C\n"); } } bool reserved_addr(uint8_t addr) { return (addr & 0x78) == 0 || (addr & 0x78) == 0x78; } void scan_bus() { sleep_ms(5000); printf("I2C Bus Scan...\n"); printf(" 0 1 2 3 4 5 6 7 8 9 A B C D E F\n"); for (int addr = 0; addr<(1 << 7); addr++) { if (addr % 16 == 0) { printf("%02x ", addr); } int ret; uint8_t rxdata; if (reserved_addr(addr)) { ret = PICO_ERROR_GENERIC; } else { ret = i2c_read_blocking(i2c0, addr, &rxdata, 1, false); } printf(ret < 0 ? "." : "@"); printf(addr % 16 == 15 ? "\n" : " "); } printf("DONE\n"); sleep_ms(2000); } void asm_test(); void asm_test2(); int nothing() { return 5; } int main() { int counter = 0; //asm_test(); counter++; counter++; counter = nothing(); counter++; //asm_test2(); i2c_init(I2C_PORT, 100 * 1000); //page 26 gpio_set_function(4, GPIO_FUNC_I2C); gpio_set_function(5, GPIO_FUNC_I2C); gpio_pull_up(4); gpio_pull_up(5); bi_decl(bi_2pins_with_func(4, 5, GPIO_FUNC_I2C)); gpio_init(CLOCK); gpio_set_dir(CLOCK, GPIO_OUT); gpio_init(RW); gpio_set_dir(RW, GPIO_IN); for (int i=0; i<16; i++) { gpio_init(addr_pins[i]); gpio_set_dir(addr_pins[i], GPIO_IN); } stdio_init_all(); scan_bus(); while(true) { //pulse clock uint8_t val = 0xEA; //NOOP by default.. page 22 gpio_put(CLOCK, 0); //set clock LOW sleep_ms(10); bool isread = gpio_get(RW); unsigned int fullAddr = 0; for (int i=0; i<16; i++) { int bit = (gpio_get(addr_pins[i]) ? 1 : 0); fullAddr |= (bit << i); } bool is_pico_bus = fullAddr >= BASE_BUS_ADDRESS; if (!isread || !is_pico_bus) { write_data(0xFF); //set pins HIGH on the PCF8574 before reading values. } //6502 startup vector = 0xFFFC (2 bytes) if (fullAddr == 0xFFFC) { val = BASE_BUS_ADDRESS & 0xFF; write_data(val); } else if (fullAddr == 0xFFFD) { val = (BASE_BUS_ADDRESS >> 8) & 0xFF; write_data(val); } //check if the address is for code. if (fullAddr >= BASE_BUS_ADDRESS && fullAddr < BASE_BUS_ADDRESS + sizeof(CODE)) { val = CODE[fullAddr - BASE_BUS_ADDRESS]; write_data(val); } //check if the address is for memory region. bool is_mem_addr = fullAddr >= BASE_MEM_ADDRESS && fullAddr < BASE_MEM_ADDRESS + sizeof(MEM); if (is_mem_addr && isread) { val = MEM[fullAddr - BASE_MEM_ADDRESS]; write_data(val); } sleep_ms(5); gpio_put(CLOCK, 1); //Set clock HIGH sleep_ms(5); if (!isread || !is_pico_bus) { val = 0; int n = i2c_read_blocking(I2C_PORT, I2C_ADDR, &val, 1, false); if (n <= 0) { printf("FAILED READ: %2.2X\n", n); } } if (is_mem_addr && !isread) { MEM[fullAddr - BASE_MEM_ADDRESS] = val; } printf("ADDR: %4.4X - DATA: %2.2X - DIR: %c ", fullAddr, val, isread ? 'r' : 'W'); if (!isread) { //print out the bits read that the processor wrote to the bus. for (int i=7; i >= 0; i--) { printf("%d", (val >> i) & 1); } } else { printf(" "); } printf(" MEM: %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X \n", MEM[0], MEM[1], MEM[2], MEM[3], MEM[4], MEM[5], MEM[6], MEM[7]); sleep_ms(250); } } ================================================ FILE: rpi_bm/part1-5/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part1-5/README.md ================================================ Lower Level Devel Code for https://www.youtube.com/playlist?list=PLVxiWMqQvhg9FCteL7I0aohj1_YiUx1x8 ================================================ FILE: rpi_bm/part1-5/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part1-5/include/common.h ================================================ #pragma once #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part1-5/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part1-5/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part1-5/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part1-5/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part1-5/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif ================================================ FILE: rpi_bm/part1-5/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part1-5/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part1-5/src/boot.S ================================================ #include "mm.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part1-5/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part1-5/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" void kernel_main() { uart_init(); uart_send_string("Rasperry PI Bare Metal OS Initializing...\n"); #if RPI_VERSION == 3 uart_send_string("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 uart_send_string("\tBoard: Raspberry PI 4\n"); #endif uart_send_string("\n\nDone\n"); while(1) { uart_send(uart_recv()); } } ================================================ FILE: rpi_bm/part1-5/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part1-5/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part1-5/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part1-5/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret ================================================ FILE: rpi_bm/part10/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part10/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part10/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part10/i2c-slave/i2c-slave.ino ================================================ #include #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part10/include/common.h ================================================ #pragma once #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part10/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part10/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part10/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part10/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part10/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part10/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part10/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part10/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part10/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part10/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part10/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part10/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part10/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part10/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part10/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part10/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part10/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part10/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part10/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part10/src/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part10/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part10/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part10/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (int i=0; i<10; i++) { char buffer[10]; i2c_recv(21, buffer, 9); buffer[9] = 0; printf("Received: %s\n", buffer); timer_sleep(250); } for (u8 d=0; d<20; d++) { i2c_send(21, &d, 1); timer_sleep(250); printf("Sent: %d\n", d); } char *msg = "Hello Slave Device"; i2c_send(21, msg, 18); printf("DONE!\n"); while(1) { //uart_send(uart_recv()); } } ================================================ FILE: rpi_bm/part10/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part10/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part10/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part10/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part10/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part10/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part11/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part11/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part11/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part11/i2c-slave/i2c-slave.ino ================================================ #include #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part11/include/common.h ================================================ #pragma once #include #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part11/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part11/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part11/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part11/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part11/include/lcd.h ================================================ #pragma once #include "common.h" //HD44780 Datasheet //https://image.dfrobot.com/image/data/DFR0154/LCD2004%20hd44780%20Datasheet.pdf void lcd_init(u8 address); void lcd_backlight(bool on); void lcd_print(char *s); void lcd_send(u8 data, u8 mode); void lcd_command(u8 command); ================================================ FILE: rpi_bm/part11/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part11/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part11/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part11/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part11/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part11/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part11/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part11/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part11/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part11/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part11/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part11/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); bool str_eq(char *a, char *b); ================================================ FILE: rpi_bm/part11/spi-slave/spi-slave.ino ================================================ #include char buff [255]; volatile byte indx; volatile boolean process; int lastSize = 0; void setup (void) { Serial.begin (115200); pinMode(MISO, OUTPUT); // have to send on master in so it set as output SPCR |= _BV(SPE); // turn on SPI in slave mode indx = 0; // buffer empty process = false; SPI.setClockDivider(2); SPI.attachInterrupt(); // turn on interrupt Serial.println("SPI LISTENING"); } ISR (SPI_STC_vect) { byte c = SPDR; // read byte from SPI Data Register if (indx < sizeof buff) { buff [indx++] = c; // save data in the next index in the array buff if (c == '\n') //check for the end of the word process = true; } } void loop (void) { if (process) { process = false; //reset the process buff[indx] = 0; Serial.print("LINE: "); Serial.println (buff); //print the array on serial monitor indx= 0; //reset button to zero } } ================================================ FILE: rpi_bm/part11/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part11/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part11/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part11/src/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part11/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part11/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part11/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (u8 i=0x20; i<0x30; i++) { if (i2c_send(i, &i, 1) == I2CS_SUCCESS) { //we know there is an i2c device here now. printf("Found device at address 0x%X\n", i); } } printf("Initializing LCD...\n"); lcd_init(0x27); for (int i=0; i<5; i++) { lcd_backlight(true); timer_sleep(250); lcd_backlight(false); timer_sleep(250); } lcd_backlight(true); lcd_print("Hello LCD!"); printf("DONE!\n"); while(1) { //uart_send(uart_recv()); } } ================================================ FILE: rpi_bm/part11/src/lcd.c ================================================ #include "lcd.h" #include "i2c.h" #include "timer.h" #include "printf.h" /* P0 -> RS P1 -> RW P2 -> E P3 -> BT (Backlight) P4 -> D4 P5 -> D5 P6 -> D6 P7 -> D7 */ typedef enum Flags { FLAG_RS = 1, FLAG_RW = 2, FLAG_EN = 4 }; // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 #define LCD_BACKLIGHT 8 #define LCD_NOBACKLIGHT 0 static u8 _backlight = LCD_BACKLIGHT; static u8 _lcd_address = 0; static void write_i2c(u8 data) { u8 value = data | _backlight; i2c_send(_lcd_address, &value, 1); } //page 33 static void pulse(u8 data) { write_i2c(data | FLAG_EN); timer_sleep(5); write_i2c(data & ~FLAG_EN); timer_sleep(1); } static void write_4bits(u8 data) { write_i2c(data); pulse(data); } void lcd_send(u8 data, u8 mode) { write_4bits((data & 0xF0) | mode); write_4bits(((data << 4) & 0xF0) | mode); } void lcd_command(u8 command) { lcd_send(command, 0); } void lcd_init(u8 address) { _lcd_address = address; //page 46 write_4bits(3 << 4); timer_sleep(5); write_4bits(3 << 4); timer_sleep(1); write_4bits(3 << 4); write_4bits(2 << 4); lcd_command(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE); lcd_command(LCD_DISPLAYCONTROL | LCD_DISPLAYON); lcd_command(LCD_CLEARDISPLAY); timer_sleep(2); lcd_command(LCD_ENTRYMODESET | LCD_ENTRYLEFT); lcd_command(LCD_RETURNHOME); timer_sleep(2); } void lcd_backlight(bool on) { if (on) { _backlight = LCD_BACKLIGHT; } else { _backlight = LCD_NOBACKLIGHT; } write_i2c(0); } //page 42 : 6 void lcd_print(char *s) { while(*s) { lcd_send(*s, FLAG_RS); s++; } } ================================================ FILE: rpi_bm/part11/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part11/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part11/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part11/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part11/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part11/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part11/user_submissions/README.md ================================================ This is for you all to add your own implementations for others to see. Create a sub folder with your username containing the code for the project to share. Create a pull request and I will merge it if all looks good. Thanks! ================================================ FILE: rpi_bm/part12/.vscode/settings.json ================================================ { "files.associations": { "led_display.h": "c" } } ================================================ FILE: rpi_bm/part12/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part12/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part12/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part12/i2c-slave/i2c-slave.ino ================================================ #include #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part12/include/common.h ================================================ #pragma once #include #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part12/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part12/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part12/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part12/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part12/include/lcd.h ================================================ #pragma once #include "common.h" //HD44780 Datasheet //https://image.dfrobot.com/image/data/DFR0154/LCD2004%20hd44780%20Datasheet.pdf void lcd_init(u8 address); void lcd_backlight(bool on); void lcd_print(char *s); void lcd_send(u8 data, u8 mode); void lcd_command(u8 command); ================================================ FILE: rpi_bm/part12/include/led_display.h ================================================ #pragma once #include "common.h" void led_display_init(); void led_display_send_command(u8 opcode, u8 data); void led_display_clear(); void led_display_intensity(u8 value); void led_display_set_digit(u8 digit, u8 value, bool dot); void led_display_set_value(int value); typedef enum { LD_NOOP = 0, LD_DIGIT0, LD_DIGIT1, LD_DIGIT2, LD_DIGIT3, LD_DIGIT4, LD_DIGIT5, LD_DIGIT6, LD_DIGIT7, LD_DECODE_MODE, LD_INTENSITY, LD_SCANLIMIT, LD_SHUTDOWN, LD_DISPLAYTEST = 15 } led_display_opcodes; ================================================ FILE: rpi_bm/part12/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part12/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part12/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part12/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part12/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part12/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part12/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part12/include/peripherals/spi.h ================================================ #pragma once #include "common.h" struct Spi0Regs { reg32 cs; reg32 fifo; reg32 clock; reg32 data_length; reg32 ltoh; reg32 dc; }; #define REGS_SPI0 ((struct Spi0Regs *)(PBASE + 0x00204000)) // CS Register #define CS_LEN_LONG (1 << 25) #define CS_DMA_LEN (1 << 24) #define CS_CSPOL2 (1 << 23) #define CS_CSPOL1 (1 << 22) #define CS_CSPOL0 (1 << 21) #define CS_RXF (1 << 20) #define CS_RXR (1 << 19) #define CS_TXD (1 << 18) #define CS_RXD (1 << 17) #define CS_DONE (1 << 16) #define CS_LEN (1 << 13) #define CS_REN (1 << 12) #define CS_ADCS (1 << 11) #define CS_INTR (1 << 10) #define CS_INTD (1 << 9) #define CS_DMAEN (1 << 8) #define CS_TA (1 << 7) #define CS_CSPOL (1 << 6) #define CS_CLEAR_RX (1 << 5) #define CS_CLEAR_TX (1 << 4) #define CS_CPOL__SHIFT 3 #define CS_CPHA__SHIFT 2 #define CS_CS (1 << 0) #define CS_CS__SHIFT 0 ================================================ FILE: rpi_bm/part12/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part12/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part12/include/spi.h ================================================ #pragma once #include "common.h" void spi_init(); void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size); void spi_send(u8 chip_select, u8 *data, u32 size); void spi_recv(u8 chip_select, u8 *data, u32 size); ================================================ FILE: rpi_bm/part12/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part12/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part12/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part12/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part12/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part12/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part12/src/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part12/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part12/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part12/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" #include "spi.h" #include "led_display.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (u8 i=0x20; i<0x30; i++) { if (i2c_send(i, &i, 1) == I2CS_SUCCESS) { //we know there is an i2c device here now. printf("Found device at address 0x%X\n", i); } } printf("Initializing SPI...\n"); spi_init(); printf("Initializing Display...\n"); led_display_init(); timer_sleep(2000); led_display_clear(); printf("Cleared\n"); for (int i=0; i<=9; i++) { for (int d=0; d<8; d++) { led_display_set_digit(d, i, false); timer_sleep(200); } } printf("Intensifying...\n"); for (int i=0; i<16; i++) { printf("Intensity: %d\n", i); led_display_intensity(i); timer_sleep(200); } led_display_clear(); timer_sleep(2000); //HELLO led_display_send_command(LD_DIGIT4, 0b00110111); led_display_send_command(LD_DIGIT3, 0b01001111); led_display_send_command(LD_DIGIT2, 0b00001110); led_display_send_command(LD_DIGIT1, 0b00001110); led_display_send_command(LD_DIGIT0, 0b01111110); printf("Shutting down...\n"); timer_sleep(2000); led_display_send_command(LD_SHUTDOWN, 0); printf("DONE!\n"); while(1) { //uart_send(uart_recv()); } } ================================================ FILE: rpi_bm/part12/src/lcd.c ================================================ #include "lcd.h" #include "i2c.h" #include "timer.h" #include "printf.h" /* P0 -> RS P1 -> RW P2 -> E P3 -> BT (Backlight) P4 -> D4 P5 -> D5 P6 -> D6 P7 -> D7 */ typedef enum Flags { FLAG_RS = 1, FLAG_RW = 2, FLAG_EN = 4 }; // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 #define LCD_BACKLIGHT 8 #define LCD_NOBACKLIGHT 0 static u8 _backlight = LCD_BACKLIGHT; static u8 _lcd_address = 0; static void write_i2c(u8 data) { u8 value = data | _backlight; i2c_send(_lcd_address, &value, 1); } //page 33 static void pulse(u8 data) { write_i2c(data | FLAG_EN); timer_sleep(5); write_i2c(data & ~FLAG_EN); timer_sleep(1); } static void write_4bits(u8 data) { write_i2c(data); pulse(data); } void lcd_send(u8 data, u8 mode) { write_4bits((data & 0xF0) | mode); write_4bits(((data << 4) & 0xF0) | mode); } void lcd_command(u8 command) { lcd_send(command, 0); } void lcd_init(u8 address) { _lcd_address = address; //page 46 write_4bits(3 << 4); timer_sleep(5); write_4bits(3 << 4); timer_sleep(1); write_4bits(3 << 4); write_4bits(2 << 4); lcd_command(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE); lcd_command(LCD_DISPLAYCONTROL | LCD_DISPLAYON); lcd_command(LCD_CLEARDISPLAY); timer_sleep(2); lcd_command(LCD_ENTRYMODESET | LCD_ENTRYLEFT); lcd_command(LCD_RETURNHOME); timer_sleep(2); } void lcd_backlight(bool on) { if (on) { _backlight = LCD_BACKLIGHT; } else { _backlight = LCD_NOBACKLIGHT; } write_i2c(0); } //page 42 : 6 void lcd_print(char *s) { while(*s) { lcd_send(*s, FLAG_RS); s++; } } ================================================ FILE: rpi_bm/part12/src/led_display.c ================================================ #include "led_display.h" #include "spi.h" const static u8 DIGIT_TABLE [] = { 0b01111110,0b00110000,0b01101101,0b01111001,0b00110011,0b01011011,0b01011111,0b01110000, 0b01111111,0b01111011 }; void led_display_init() { led_display_send_command(LD_SCANLIMIT, 7); led_display_send_command(LD_DECODE_MODE, 0); led_display_send_command(LD_SHUTDOWN, 1); led_display_send_command(LD_INTENSITY, 0); led_display_send_command(LD_DISPLAYTEST, 0); led_display_intensity(5); } void led_display_send_command(u8 opcode, u8 data) { u8 cmd[2]; cmd[0] = opcode; cmd[1] = data; spi_send(0, cmd, 2); } void led_display_clear() { for (int i=LD_DIGIT0; i<=LD_DIGIT7; i++) { led_display_send_command(i, 0); } } void led_display_intensity(u8 value) { led_display_send_command(LD_INTENSITY, value); } void led_display_set_digit(u8 digit, u8 value, bool dot) { u8 digit_value = DIGIT_TABLE[value]; if (dot) { digit_value |= 0x80; } led_display_send_command(LD_DIGIT0 + digit, digit_value); } ================================================ FILE: rpi_bm/part12/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part12/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part12/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part12/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part12/src/spi.c ================================================ #include "spi.h" #include "peripherals/spi.h" #include "gpio.h" #include "printf.h" void spi_init() { gpio_pin_set_func(7, GFAlt0); //CS1 gpio_pin_set_func(8, GFAlt0); //CS0 -> CS (red) gpio_pin_set_func(9, GFAlt0); //MISO gpio_pin_set_func(10, GFAlt0);//MOSI -> DIN (brown) gpio_pin_set_func(11, GFAlt0);//SCLK -> CLK (orange) gpio_pin_enable(7); gpio_pin_enable(8); gpio_pin_enable(9); gpio_pin_enable(10); gpio_pin_enable(11); } void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size) { REGS_SPI0->data_length = size; REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_CS) | (chip_select << CS_CS__SHIFT) | CS_CLEAR_RX | CS_CLEAR_TX | CS_TA; u32 read_count = 0; u32 write_count = 0; while(read_count < size || write_count < size) { while(write_count < size && REGS_SPI0->cs & CS_TXD) { if (sbuffer) { REGS_SPI0->fifo = *sbuffer++; } else { REGS_SPI0->fifo = 0; } write_count++; } while(read_count < size && REGS_SPI0->cs & CS_RXD) { u32 data = REGS_SPI0->fifo; if (rbuffer) { *rbuffer++ = data; } read_count++; } } while(!(REGS_SPI0->cs & CS_DONE)) { while(REGS_SPI0->cs & CS_RXD) { u32 r = REGS_SPI0->fifo; printf("Left Over: %d\n", r); } } REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_TA); } void spi_send(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, data, 0, size); } void spi_recv(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, 0, data, size); } ================================================ FILE: rpi_bm/part12/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part12/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part13/.vscode/settings.json ================================================ { "files.associations": { "led_display.h": "c" } } ================================================ FILE: rpi_bm/part13/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part13/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part13/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part13/i2c-slave/i2c-slave.ino ================================================ #include #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part13/include/common.h ================================================ #pragma once #include #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part13/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part13/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part13/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part13/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part13/include/lcd.h ================================================ #pragma once #include "common.h" //HD44780 Datasheet //https://image.dfrobot.com/image/data/DFR0154/LCD2004%20hd44780%20Datasheet.pdf void lcd_init(u8 address); void lcd_backlight(bool on); void lcd_print(char *s); void lcd_send(u8 data, u8 mode); void lcd_command(u8 command); ================================================ FILE: rpi_bm/part13/include/led_display.h ================================================ #pragma once #include "common.h" void led_display_init(); void led_display_send_command(u8 opcode, u8 data); void led_display_clear(); void led_display_intensity(u8 value); void led_display_set_digit(u8 digit, u8 value, bool dot); void led_display_set_value(int value); typedef enum { LD_NOOP = 0, LD_DIGIT0, LD_DIGIT1, LD_DIGIT2, LD_DIGIT3, LD_DIGIT4, LD_DIGIT5, LD_DIGIT6, LD_DIGIT7, LD_DECODE_MODE, LD_INTENSITY, LD_SCANLIMIT, LD_SHUTDOWN, LD_DISPLAYTEST = 15 } led_display_opcodes; ================================================ FILE: rpi_bm/part13/include/mailbox.h ================================================ #pragma once #include "common.h" typedef struct { u32 id; u32 buffer_size; u32 value_length; } mailbox_tag; typedef struct { u32 size; void *tag; } mailbox_command; typedef struct { mailbox_tag tag; u32 id; u32 value; } mailbox_generic; typedef struct { mailbox_tag tag; u32 id; u32 state; } mailbox_power; typedef struct { mailbox_tag tag; u32 id; u32 rate; } mailbox_clock; typedef enum { CT_EMMC = 1, CT_UART = 2, CT_ARM = 3, CT_CORE = 4 } clock_type; #define RPI_POWER_DOMAIN_I2C0 0 #define RPI_POWER_DOMAIN_I2C1 1 #define RPI_POWER_DOMAIN_I2C2 2 #define RPI_POWER_DOMAIN_VIDEO_SCALER 3 #define RPI_POWER_DOMAIN_VPU1 4 #define RPI_POWER_DOMAIN_HDMI 5 #define RPI_POWER_DOMAIN_USB 6 #define RPI_POWER_DOMAIN_VEC 7 #define RPI_POWER_DOMAIN_JPEG 8 #define RPI_POWER_DOMAIN_H264 9 #define RPI_POWER_DOMAIN_V3D 10 #define RPI_POWER_DOMAIN_ISP 11 #define RPI_POWER_DOMAIN_UNICAM0 12 #define RPI_POWER_DOMAIN_UNICAM1 13 #define RPI_POWER_DOMAIN_CCP2RX 14 #define RPI_POWER_DOMAIN_CSI2 15 #define RPI_POWER_DOMAIN_CPI 16 #define RPI_POWER_DOMAIN_DSI0 17 #define RPI_POWER_DOMAIN_DSI1 18 #define RPI_POWER_DOMAIN_TRANSPOSER 19 #define RPI_POWER_DOMAIN_CCP2TX 20 #define RPI_POWER_DOMAIN_CDP 21 #define RPI_POWER_DOMAIN_ARM 22 #define RPI_POWER_DOMAIN_COUNT 23 enum rpi_firmware_property_status { RPI_FIRMWARE_STATUS_REQUEST = 0, RPI_FIRMWARE_STATUS_SUCCESS = 0x80000000, RPI_FIRMWARE_STATUS_ERROR = 0x80000001, }; enum rpi_firmware_property_tag { RPI_FIRMWARE_PROPERTY_END = 0, RPI_FIRMWARE_GET_FIRMWARE_REVISION = 0x00000001, RPI_FIRMWARE_SET_CURSOR_INFO = 0x00008010, RPI_FIRMWARE_SET_CURSOR_STATE = 0x00008011, RPI_FIRMWARE_GET_BOARD_MODEL = 0x00010001, RPI_FIRMWARE_GET_BOARD_REVISION = 0x00010002, RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 0x00010003, RPI_FIRMWARE_GET_BOARD_SERIAL = 0x00010004, RPI_FIRMWARE_GET_ARM_MEMORY = 0x00010005, RPI_FIRMWARE_GET_VC_MEMORY = 0x00010006, RPI_FIRMWARE_GET_CLOCKS = 0x00010007, RPI_FIRMWARE_GET_POWER_STATE = 0x00020001, RPI_FIRMWARE_GET_TIMING = 0x00020002, RPI_FIRMWARE_SET_POWER_STATE = 0x00028001, RPI_FIRMWARE_GET_CLOCK_STATE = 0x00030001, RPI_FIRMWARE_GET_CLOCK_RATE = 0x00030002, RPI_FIRMWARE_GET_VOLTAGE = 0x00030003, RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 0x00030004, RPI_FIRMWARE_GET_MAX_VOLTAGE = 0x00030005, RPI_FIRMWARE_GET_TEMPERATURE = 0x00030006, RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 0x00030007, RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008, RPI_FIRMWARE_GET_TURBO = 0x00030009, RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a, RPI_FIRMWARE_GET_STC = 0x0003000b, RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c, RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d, RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e, RPI_FIRMWARE_RELEASE_MEMORY = 0x0003000f, RPI_FIRMWARE_EXECUTE_CODE = 0x00030010, RPI_FIRMWARE_EXECUTE_QPU = 0x00030011, RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012, RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014, RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020, RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021, RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030, RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001, RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002, RPI_FIRMWARE_SET_VOLTAGE = 0x00038003, RPI_FIRMWARE_SET_TURBO = 0x00038009, RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021, RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030, RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041, RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041, RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042, RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043, RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043, RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045, RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, /* Dispmanx TAGS */ RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, RPI_FIRMWARE_FRAMEBUFFER_BLANK = 0x00040002, RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 0x00040005, RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 0x00040006, RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 0x00040007, RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 0x00040008, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009, RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a, RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b, RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f, RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010, RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001, RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005, RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 0x00044006, RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 0x00044007, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009, RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a, RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b, RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e, RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005, RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 0x00048006, RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 0x00048007, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009, RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a, RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b, RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f, RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020, RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e, RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f, RPI_FIRMWARE_VCHIQ_INIT = 0x00048010, RPI_FIRMWARE_GET_COMMAND_LINE = 0x00050001, RPI_FIRMWARE_GET_DMA_CHANNELS = 0x00060001, }; u32 mailbox_clock_rate(clock_type ct); bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value); bool mailbox_power_check(u32 type); bool mailbox_process(mailbox_tag *tag, u32 tag_size); ================================================ FILE: rpi_bm/part13/include/mem.h ================================================ #pragma once #include "common.h" void *memcpy(void *dest, const void *src, u32 n); ================================================ FILE: rpi_bm/part13/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part13/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part13/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part13/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part13/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part13/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part13/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part13/include/peripherals/spi.h ================================================ #pragma once #include "common.h" struct Spi0Regs { reg32 cs; reg32 fifo; reg32 clock; reg32 data_length; reg32 ltoh; reg32 dc; }; #define REGS_SPI0 ((struct Spi0Regs *)(PBASE + 0x00204000)) // CS Register #define CS_LEN_LONG (1 << 25) #define CS_DMA_LEN (1 << 24) #define CS_CSPOL2 (1 << 23) #define CS_CSPOL1 (1 << 22) #define CS_CSPOL0 (1 << 21) #define CS_RXF (1 << 20) #define CS_RXR (1 << 19) #define CS_TXD (1 << 18) #define CS_RXD (1 << 17) #define CS_DONE (1 << 16) #define CS_LEN (1 << 13) #define CS_REN (1 << 12) #define CS_ADCS (1 << 11) #define CS_INTR (1 << 10) #define CS_INTD (1 << 9) #define CS_DMAEN (1 << 8) #define CS_TA (1 << 7) #define CS_CSPOL (1 << 6) #define CS_CLEAR_RX (1 << 5) #define CS_CLEAR_TX (1 << 4) #define CS_CPOL__SHIFT 3 #define CS_CPHA__SHIFT 2 #define CS_CS (1 << 0) #define CS_CS__SHIFT 0 ================================================ FILE: rpi_bm/part13/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part13/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part13/include/spi.h ================================================ #pragma once #include "common.h" void spi_init(); void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size); void spi_send(u8 chip_select, u8 *data, u32 size); void spi_recv(u8 chip_select, u8 *data, u32 size); ================================================ FILE: rpi_bm/part13/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part13/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part13/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part13/include/video.h ================================================ #pragma once #include "common.h" bool video_set_resolution(u32 x, u32 y, u32 bpp); ================================================ FILE: rpi_bm/part13/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part13/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part13/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part13/src/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part13/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part13/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part13/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" #include "spi.h" #include "led_display.h" #include "mailbox.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (u8 i=0x20; i<0x30; i++) { if (i2c_send(i, &i, 1) == I2CS_SUCCESS) { //we know there is an i2c device here now. printf("Found device at address 0x%X\n", i); } } printf("Initializing SPI...\n"); spi_init(); printf("MAILBOX:\n"); printf("CORE CLOCK: %d\n", mailbox_clock_rate(CT_CORE)); printf("EMMC CLOCK: %d\n", mailbox_clock_rate(CT_EMMC)); printf("UART CLOCK: %d\n", mailbox_clock_rate(CT_UART)); printf("ARM CLOCK: %d\n", mailbox_clock_rate(CT_ARM)); printf("I2C POWER STATE:\n"); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } timer_sleep(2000); for (int i=0; i<3; i++) { u32 on = 1; mailbox_generic_command(RPI_FIRMWARE_SET_DOMAIN_STATE, i, &on); printf("SET POWER DOMAIN STATUS FOR %d = %d\n", i, on); } timer_sleep(1000); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } u32 max_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_MAX_TEMPERATURE, 0, &max_temp); while(1) { u32 cur_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_TEMPERATURE, 0, &cur_temp); printf("Cur temp: %dC MAX: %dC\n", cur_temp / 1000, max_temp / 1000); timer_sleep(1000); } } ================================================ FILE: rpi_bm/part13/src/lcd.c ================================================ #include "lcd.h" #include "i2c.h" #include "timer.h" #include "printf.h" /* P0 -> RS P1 -> RW P2 -> E P3 -> BT (Backlight) P4 -> D4 P5 -> D5 P6 -> D6 P7 -> D7 */ typedef enum Flags { FLAG_RS = 1, FLAG_RW = 2, FLAG_EN = 4 }; // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 #define LCD_BACKLIGHT 8 #define LCD_NOBACKLIGHT 0 static u8 _backlight = LCD_BACKLIGHT; static u8 _lcd_address = 0; static void write_i2c(u8 data) { u8 value = data | _backlight; i2c_send(_lcd_address, &value, 1); } //page 33 static void pulse(u8 data) { write_i2c(data | FLAG_EN); timer_sleep(5); write_i2c(data & ~FLAG_EN); timer_sleep(1); } static void write_4bits(u8 data) { write_i2c(data); pulse(data); } void lcd_send(u8 data, u8 mode) { write_4bits((data & 0xF0) | mode); write_4bits(((data << 4) & 0xF0) | mode); } void lcd_command(u8 command) { lcd_send(command, 0); } void lcd_init(u8 address) { _lcd_address = address; //page 46 write_4bits(3 << 4); timer_sleep(5); write_4bits(3 << 4); timer_sleep(1); write_4bits(3 << 4); write_4bits(2 << 4); lcd_command(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE); lcd_command(LCD_DISPLAYCONTROL | LCD_DISPLAYON); lcd_command(LCD_CLEARDISPLAY); timer_sleep(2); lcd_command(LCD_ENTRYMODESET | LCD_ENTRYLEFT); lcd_command(LCD_RETURNHOME); timer_sleep(2); } void lcd_backlight(bool on) { if (on) { _backlight = LCD_BACKLIGHT; } else { _backlight = LCD_NOBACKLIGHT; } write_i2c(0); } //page 42 : 6 void lcd_print(char *s) { while(*s) { lcd_send(*s, FLAG_RS); s++; } } ================================================ FILE: rpi_bm/part13/src/led_display.c ================================================ #include "led_display.h" #include "spi.h" const static u8 DIGIT_TABLE [] = { 0b01111110,0b00110000,0b01101101,0b01111001,0b00110011,0b01011011,0b01011111,0b01110000, 0b01111111,0b01111011 }; void led_display_init() { led_display_send_command(LD_SCANLIMIT, 7); led_display_send_command(LD_DECODE_MODE, 0); led_display_send_command(LD_SHUTDOWN, 1); led_display_send_command(LD_INTENSITY, 0); led_display_send_command(LD_DISPLAYTEST, 0); led_display_intensity(5); } void led_display_send_command(u8 opcode, u8 data) { u8 cmd[2]; cmd[0] = opcode; cmd[1] = data; spi_send(0, cmd, 2); } void led_display_clear() { for (int i=LD_DIGIT0; i<=LD_DIGIT7; i++) { led_display_send_command(i, 0); } } void led_display_intensity(u8 value) { led_display_send_command(LD_INTENSITY, value); } void led_display_set_digit(u8 digit, u8 value, bool dot) { u8 digit_value = DIGIT_TABLE[value]; if (dot) { digit_value |= 0x80; } led_display_send_command(LD_DIGIT0 + digit, digit_value); } ================================================ FILE: rpi_bm/part13/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part13/src/mailbox.c ================================================ #include #include #include "printf.h" #include typedef struct { reg32 read; reg32 res[5]; reg32 status; reg32 config; reg32 write; } mailbox_regs; mailbox_regs *MBX() { return (mailbox_regs *)(PBASE + 0xB880); } typedef struct { u32 size; u32 code; u8 tags[0]; } property_buffer; static u32 property_data[8192] __attribute__((aligned(16))); #define MAIL_EMPTY 0x40000000 #define MAIL_FULL 0x80000000 #define MAIL_POWER 0x0 // Mailbox Channel 0: Power Management Interface #define MAIL_FB 0x1 // Mailbox Channel 1: Frame Buffer #define MAIL_VUART 0x2 // Mailbox Channel 2: Virtual UART #define MAIL_VCHIQ 0x3 // Mailbox Channel 3: VCHIQ Interface #define MAIL_LEDS 0x4 // Mailbox Channel 4: LEDs Interface #define MAIL_BUTTONS 0x5 // Mailbox Channel 5: Buttons Interface #define MAIL_TOUCH 0x6 // Mailbox Channel 6: Touchscreen Interface #define MAIL_COUNT 0x7 // Mailbox Channel 7: Counter #define MAIL_TAGS 0x8 // Mailbox Channel 8: Tags (ARM to VC) static void mailbox_write(u8 channel, u32 data) { while(MBX()->status & MAIL_FULL) ; MBX()->write = (data & 0xFFFFFFF0 | (channel & 0xF)); } static u32 mailbox_read(u8 channel) { while(true) { while(MBX()->status & MAIL_EMPTY) ; u32 data = MBX()->read; u8 read_channel = (u8)(data & 0xF); if (read_channel == channel) { return data & 0xFFFFFFF0; } } } bool mailbox_process(mailbox_tag *tag, u32 tag_size) { int buffer_size = tag_size + 12; memcpy(&property_data[2], tag, tag_size); property_buffer *buff = (property_buffer *)property_data; buff->size = buffer_size; buff->code = RPI_FIRMWARE_STATUS_REQUEST; property_data[(tag_size + 12) / 4 - 1] = RPI_FIRMWARE_PROPERTY_END; mailbox_write(MAIL_TAGS, (u32)(void *)property_data); int result = mailbox_read(MAIL_TAGS); memcpy(tag, property_data + 2, tag_size); return true; } bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value) { mailbox_generic mbx; mbx.tag.id = tag_id; mbx.tag.value_length = 0; mbx.tag.buffer_size = sizeof(mailbox_generic) - sizeof(mailbox_tag); mbx.id = id; mbx.value = *value; if (!mailbox_process((mailbox_tag *)&mbx, sizeof(mbx))) { printf("FAILED TO PROCESS: %X\n", tag_id); return false; } *value = mbx.value; return true; } u32 mailbox_clock_rate(clock_type ct) { mailbox_clock c; c.tag.id = RPI_FIRMWARE_GET_CLOCK_RATE; c.tag.value_length = 0; c.tag.buffer_size = sizeof(c) - sizeof(c.tag); c.id = ct; mailbox_process((mailbox_tag *)&c, sizeof(c)); return c.rate; } bool mailbox_power_check(u32 type) { mailbox_power p; p.tag.id = RPI_FIRMWARE_GET_DOMAIN_STATE; p.tag.value_length = 0; p.tag.buffer_size = sizeof(p) - sizeof(p.tag); p.id = type; p.state = ~0; mailbox_process((mailbox_tag *)&p, sizeof(p)); return p.state && p.state != ~0; } ================================================ FILE: rpi_bm/part13/src/mem.c ================================================ #include void *memcpy(void *dest, const void *src, u32 n) { //simple implementation... u8 *bdest = (u8 *)dest; u8 *bsrc = (u8 *)src; for (int i=0; ienables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part13/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part13/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part13/src/spi.c ================================================ #include "spi.h" #include "peripherals/spi.h" #include "gpio.h" #include "printf.h" void spi_init() { gpio_pin_set_func(7, GFAlt0); //CS1 gpio_pin_set_func(8, GFAlt0); //CS0 -> CS (red) gpio_pin_set_func(9, GFAlt0); //MISO gpio_pin_set_func(10, GFAlt0);//MOSI -> DIN (brown) gpio_pin_set_func(11, GFAlt0);//SCLK -> CLK (orange) gpio_pin_enable(7); gpio_pin_enable(8); gpio_pin_enable(9); gpio_pin_enable(10); gpio_pin_enable(11); } void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size) { REGS_SPI0->data_length = size; REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_CS) | (chip_select << CS_CS__SHIFT) | CS_CLEAR_RX | CS_CLEAR_TX | CS_TA; u32 read_count = 0; u32 write_count = 0; while(read_count < size || write_count < size) { while(write_count < size && REGS_SPI0->cs & CS_TXD) { if (sbuffer) { REGS_SPI0->fifo = *sbuffer++; } else { REGS_SPI0->fifo = 0; } write_count++; } while(read_count < size && REGS_SPI0->cs & CS_RXD) { u32 data = REGS_SPI0->fifo; if (rbuffer) { *rbuffer++ = data; } read_count++; } } while(!(REGS_SPI0->cs & CS_DONE)) { while(REGS_SPI0->cs & CS_RXD) { u32 r = REGS_SPI0->fifo; printf("Left Over: %d\n", r); } } REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_TA); } void spi_send(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, data, 0, size); } void spi_recv(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, 0, data, size); } ================================================ FILE: rpi_bm/part13/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part13/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part14/.vscode/settings.json ================================================ { "files.associations": { "led_display.h": "c" } } ================================================ FILE: rpi_bm/part14/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part14/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part14/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part14/i2c-slave/i2c-slave.ino ================================================ #include #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part14/include/common.h ================================================ #pragma once #include #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part14/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part14/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part14/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part14/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part14/include/lcd.h ================================================ #pragma once #include "common.h" //HD44780 Datasheet //https://image.dfrobot.com/image/data/DFR0154/LCD2004%20hd44780%20Datasheet.pdf void lcd_init(u8 address); void lcd_backlight(bool on); void lcd_print(char *s); void lcd_send(u8 data, u8 mode); void lcd_command(u8 command); ================================================ FILE: rpi_bm/part14/include/led_display.h ================================================ #pragma once #include "common.h" void led_display_init(); void led_display_send_command(u8 opcode, u8 data); void led_display_clear(); void led_display_intensity(u8 value); void led_display_set_digit(u8 digit, u8 value, bool dot); void led_display_set_value(int value); typedef enum { LD_NOOP = 0, LD_DIGIT0, LD_DIGIT1, LD_DIGIT2, LD_DIGIT3, LD_DIGIT4, LD_DIGIT5, LD_DIGIT6, LD_DIGIT7, LD_DECODE_MODE, LD_INTENSITY, LD_SCANLIMIT, LD_SHUTDOWN, LD_DISPLAYTEST = 15 } led_display_opcodes; ================================================ FILE: rpi_bm/part14/include/mailbox.h ================================================ #pragma once #include "common.h" typedef struct { u32 id; u32 buffer_size; u32 value_length; } mailbox_tag; typedef struct { u32 size; void *tag; } mailbox_command; typedef struct { mailbox_tag tag; u32 id; u32 value; } mailbox_generic; typedef struct { mailbox_tag tag; u32 id; u32 state; } mailbox_power; typedef struct { mailbox_tag tag; u32 id; u32 rate; } mailbox_clock; typedef enum { CT_EMMC = 1, CT_UART = 2, CT_ARM = 3, CT_CORE = 4 } clock_type; #define RPI_POWER_DOMAIN_I2C0 0 #define RPI_POWER_DOMAIN_I2C1 1 #define RPI_POWER_DOMAIN_I2C2 2 #define RPI_POWER_DOMAIN_VIDEO_SCALER 3 #define RPI_POWER_DOMAIN_VPU1 4 #define RPI_POWER_DOMAIN_HDMI 5 #define RPI_POWER_DOMAIN_USB 6 #define RPI_POWER_DOMAIN_VEC 7 #define RPI_POWER_DOMAIN_JPEG 8 #define RPI_POWER_DOMAIN_H264 9 #define RPI_POWER_DOMAIN_V3D 10 #define RPI_POWER_DOMAIN_ISP 11 #define RPI_POWER_DOMAIN_UNICAM0 12 #define RPI_POWER_DOMAIN_UNICAM1 13 #define RPI_POWER_DOMAIN_CCP2RX 14 #define RPI_POWER_DOMAIN_CSI2 15 #define RPI_POWER_DOMAIN_CPI 16 #define RPI_POWER_DOMAIN_DSI0 17 #define RPI_POWER_DOMAIN_DSI1 18 #define RPI_POWER_DOMAIN_TRANSPOSER 19 #define RPI_POWER_DOMAIN_CCP2TX 20 #define RPI_POWER_DOMAIN_CDP 21 #define RPI_POWER_DOMAIN_ARM 22 #define RPI_POWER_DOMAIN_COUNT 23 enum rpi_firmware_property_status { RPI_FIRMWARE_STATUS_REQUEST = 0, RPI_FIRMWARE_STATUS_SUCCESS = 0x80000000, RPI_FIRMWARE_STATUS_ERROR = 0x80000001, }; enum rpi_firmware_property_tag { RPI_FIRMWARE_PROPERTY_END = 0, RPI_FIRMWARE_GET_FIRMWARE_REVISION = 0x00000001, RPI_FIRMWARE_SET_CURSOR_INFO = 0x00008010, RPI_FIRMWARE_SET_CURSOR_STATE = 0x00008011, RPI_FIRMWARE_GET_BOARD_MODEL = 0x00010001, RPI_FIRMWARE_GET_BOARD_REVISION = 0x00010002, RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 0x00010003, RPI_FIRMWARE_GET_BOARD_SERIAL = 0x00010004, RPI_FIRMWARE_GET_ARM_MEMORY = 0x00010005, RPI_FIRMWARE_GET_VC_MEMORY = 0x00010006, RPI_FIRMWARE_GET_CLOCKS = 0x00010007, RPI_FIRMWARE_GET_POWER_STATE = 0x00020001, RPI_FIRMWARE_GET_TIMING = 0x00020002, RPI_FIRMWARE_SET_POWER_STATE = 0x00028001, RPI_FIRMWARE_GET_CLOCK_STATE = 0x00030001, RPI_FIRMWARE_GET_CLOCK_RATE = 0x00030002, RPI_FIRMWARE_GET_VOLTAGE = 0x00030003, RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 0x00030004, RPI_FIRMWARE_GET_MAX_VOLTAGE = 0x00030005, RPI_FIRMWARE_GET_TEMPERATURE = 0x00030006, RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 0x00030007, RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008, RPI_FIRMWARE_GET_TURBO = 0x00030009, RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a, RPI_FIRMWARE_GET_STC = 0x0003000b, RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c, RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d, RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e, RPI_FIRMWARE_RELEASE_MEMORY = 0x0003000f, RPI_FIRMWARE_EXECUTE_CODE = 0x00030010, RPI_FIRMWARE_EXECUTE_QPU = 0x00030011, RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012, RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014, RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020, RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021, RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030, RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001, RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002, RPI_FIRMWARE_SET_VOLTAGE = 0x00038003, RPI_FIRMWARE_SET_TURBO = 0x00038009, RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021, RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030, RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041, RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041, RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042, RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043, RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043, RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045, RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, /* Dispmanx TAGS */ RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, RPI_FIRMWARE_FRAMEBUFFER_BLANK = 0x00040002, RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 0x00040005, RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 0x00040006, RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 0x00040007, RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 0x00040008, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009, RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a, RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b, RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f, RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010, RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001, RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005, RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 0x00044006, RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 0x00044007, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009, RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a, RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b, RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e, RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005, RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 0x00048006, RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 0x00048007, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009, RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a, RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b, RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f, RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020, RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e, RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f, RPI_FIRMWARE_VCHIQ_INIT = 0x00048010, RPI_FIRMWARE_GET_COMMAND_LINE = 0x00050001, RPI_FIRMWARE_GET_DMA_CHANNELS = 0x00060001, }; u32 mailbox_clock_rate(clock_type ct); bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value); bool mailbox_power_check(u32 type); bool mailbox_process(mailbox_tag *tag, u32 tag_size); ================================================ FILE: rpi_bm/part14/include/mem.h ================================================ #pragma once #include "common.h" void *memcpy(void *dest, const void *src, u32 n); ================================================ FILE: rpi_bm/part14/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part14/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part14/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part14/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part14/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part14/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part14/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part14/include/peripherals/spi.h ================================================ #pragma once #include "common.h" struct Spi0Regs { reg32 cs; reg32 fifo; reg32 clock; reg32 data_length; reg32 ltoh; reg32 dc; }; #define REGS_SPI0 ((struct Spi0Regs *)(PBASE + 0x00204000)) // CS Register #define CS_LEN_LONG (1 << 25) #define CS_DMA_LEN (1 << 24) #define CS_CSPOL2 (1 << 23) #define CS_CSPOL1 (1 << 22) #define CS_CSPOL0 (1 << 21) #define CS_RXF (1 << 20) #define CS_RXR (1 << 19) #define CS_TXD (1 << 18) #define CS_RXD (1 << 17) #define CS_DONE (1 << 16) #define CS_LEN (1 << 13) #define CS_REN (1 << 12) #define CS_ADCS (1 << 11) #define CS_INTR (1 << 10) #define CS_INTD (1 << 9) #define CS_DMAEN (1 << 8) #define CS_TA (1 << 7) #define CS_CSPOL (1 << 6) #define CS_CLEAR_RX (1 << 5) #define CS_CLEAR_TX (1 << 4) #define CS_CPOL__SHIFT 3 #define CS_CPHA__SHIFT 2 #define CS_CS (1 << 0) #define CS_CS__SHIFT 0 ================================================ FILE: rpi_bm/part14/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part14/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part14/include/spi.h ================================================ #pragma once #include "common.h" void spi_init(); void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size); void spi_send(u8 chip_select, u8 *data, u32 size); void spi_recv(u8 chip_select, u8 *data, u32 size); ================================================ FILE: rpi_bm/part14/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part14/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part14/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part14/include/video.h ================================================ #pragma once #include "common.h" void video_set_resolution(u32 xres, u32 yres, u32 bpp); void video_draw_char(char c, u32 pox_x, u32 pos_y); void video_draw_string(char *s, u32 pos_x, u32 pos_y); void video_draw_pixel(u32 x, u32 y, u32 color); //comes from fontData.c u32 font_get_heigh(); u32 font_get_width(); bool font_get_pixel(char ch, u32 x, u32 y); ================================================ FILE: rpi_bm/part14/square_margin ================================================ ================================================ FILE: rpi_bm/part14/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part14/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part14/src/fontData.c ================================================ // lat1-16 console font (ISO-8859-1) // // Taken from the Linux "kbd - Keyboard and Font Utilities" package // by Andries Brouwer // Alexey Gladkov // Portions by Paul Gortmaker // Licensed under GPLv2+ // #include "common.h" static const unsigned width = 8; static const unsigned height = 16; static const unsigned extraheight = 3; static const unsigned char font_data[224][16] = { {0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0x7C, 0x16, 0x16, 0xD6, 0x7C, 0x10, 0x10, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6, 0xE6, 0xE6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE, 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x64, 0x38, 0x0C, 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00}, {0x00, 0x30, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0xD0, 0xD6, 0x7C, 0x10, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x60, 0x60, 0xF0, 0x60, 0x60, 0x66, 0xF6, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC6, 0x7C, 0x6C, 0x6C, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0x99, 0xA5, 0xA1, 0xA5, 0x99, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5, 0xA5, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x30, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF6, 0xC0, 0xC0, 0xC0, 0x00}, {0x00, 0x00, 0x7F, 0xD6, 0xD6, 0x76, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x6C, 0x38, 0x00}, {0x30, 0x70, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x6E, 0xDB, 0x06, 0x0C, 0x1F, 0x00, 0x00, 0x00}, {0x70, 0xD8, 0x30, 0xD8, 0x76, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, 0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3E, 0x78, 0xD8, 0xD8, 0xFC, 0xD8, 0xD8, 0xD8, 0xD8, 0xDE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x0C, 0x66, 0x3C, 0x00}, {0x60, 0x30, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x08, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x18, 0x3C, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0xF6, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC6, 0xCE, 0xCE, 0xDE, 0xF6, 0xE6, 0xE6, 0xC6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xCC, 0xC6, 0xC6, 0xC6, 0xD6, 0xDC, 0x80, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0x1B, 0x7F, 0xD8, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x18, 0x6C, 0x38, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x78, 0x30, 0x78, 0x0C, 0x7E, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xCE, 0xDE, 0xFE, 0xF6, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00} }; #define FIRSTCHAR 0x21 #define LASTCHAR 0xFF #define CHARCOUNT (LASTCHAR - FIRSTCHAR + 1) u32 font_get_height() { return height + extraheight; } u32 font_get_width() { return width; } bool font_get_pixel(char ch, u32 x, u32 y) { if (ch < FIRSTCHAR || ch > LASTCHAR) { return false; } u32 index = ch - FIRSTCHAR; if (y >= height) { return false; } return font_data[index][y] & (0x80 >> x) ? true : false; } ================================================ FILE: rpi_bm/part14/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part14/src/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part14/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part14/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part14/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" #include "spi.h" #include "led_display.h" #include "mailbox.h" #include "video.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (u8 i=0x20; i<0x30; i++) { if (i2c_send(i, &i, 1) == I2CS_SUCCESS) { //we know there is an i2c device here now. printf("Found device at address 0x%X\n", i); } } printf("Initializing SPI...\n"); spi_init(); printf("MAILBOX:\n"); printf("CORE CLOCK: %d\n", mailbox_clock_rate(CT_CORE)); printf("EMMC CLOCK: %d\n", mailbox_clock_rate(CT_EMMC)); printf("UART CLOCK: %d\n", mailbox_clock_rate(CT_UART)); printf("ARM CLOCK: %d\n", mailbox_clock_rate(CT_ARM)); printf("I2C POWER STATE:\n"); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(2000); for (int i=0; i<3; i++) { u32 on = 1; mailbox_generic_command(RPI_FIRMWARE_SET_DOMAIN_STATE, i, &on); printf("SET POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(1000); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } u32 max_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_MAX_TEMPERATURE, 0, &max_temp); //Do video... printf("Resolution 1824x984\n"); video_set_resolution(1824, 984, 32); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 32); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 32); printf("Resolution 480x320\n"); video_set_resolution(480, 320, 32); while(1) { u32 cur_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_TEMPERATURE, 0, &cur_temp); printf("Cur temp: %dC MAX: %dC\n", cur_temp / 1000, max_temp / 1000); timer_sleep(1000); } } ================================================ FILE: rpi_bm/part14/src/lcd.c ================================================ #include "lcd.h" #include "i2c.h" #include "timer.h" #include "printf.h" /* P0 -> RS P1 -> RW P2 -> E P3 -> BT (Backlight) P4 -> D4 P5 -> D5 P6 -> D6 P7 -> D7 */ typedef enum Flags { FLAG_RS = 1, FLAG_RW = 2, FLAG_EN = 4 }; // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 #define LCD_BACKLIGHT 8 #define LCD_NOBACKLIGHT 0 static u8 _backlight = LCD_BACKLIGHT; static u8 _lcd_address = 0; static void write_i2c(u8 data) { u8 value = data | _backlight; i2c_send(_lcd_address, &value, 1); } //page 33 static void pulse(u8 data) { write_i2c(data | FLAG_EN); timer_sleep(5); write_i2c(data & ~FLAG_EN); timer_sleep(1); } static void write_4bits(u8 data) { write_i2c(data); pulse(data); } void lcd_send(u8 data, u8 mode) { write_4bits((data & 0xF0) | mode); write_4bits(((data << 4) & 0xF0) | mode); } void lcd_command(u8 command) { lcd_send(command, 0); } void lcd_init(u8 address) { _lcd_address = address; //page 46 write_4bits(3 << 4); timer_sleep(5); write_4bits(3 << 4); timer_sleep(1); write_4bits(3 << 4); write_4bits(2 << 4); lcd_command(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE); lcd_command(LCD_DISPLAYCONTROL | LCD_DISPLAYON); lcd_command(LCD_CLEARDISPLAY); timer_sleep(2); lcd_command(LCD_ENTRYMODESET | LCD_ENTRYLEFT); lcd_command(LCD_RETURNHOME); timer_sleep(2); } void lcd_backlight(bool on) { if (on) { _backlight = LCD_BACKLIGHT; } else { _backlight = LCD_NOBACKLIGHT; } write_i2c(0); } //page 42 : 6 void lcd_print(char *s) { while(*s) { lcd_send(*s, FLAG_RS); s++; } } ================================================ FILE: rpi_bm/part14/src/led_display.c ================================================ #include "led_display.h" #include "spi.h" const static u8 DIGIT_TABLE [] = { 0b01111110,0b00110000,0b01101101,0b01111001,0b00110011,0b01011011,0b01011111,0b01110000, 0b01111111,0b01111011 }; void led_display_init() { led_display_send_command(LD_SCANLIMIT, 7); led_display_send_command(LD_DECODE_MODE, 0); led_display_send_command(LD_SHUTDOWN, 1); led_display_send_command(LD_INTENSITY, 0); led_display_send_command(LD_DISPLAYTEST, 0); led_display_intensity(5); } void led_display_send_command(u8 opcode, u8 data) { u8 cmd[2]; cmd[0] = opcode; cmd[1] = data; spi_send(0, cmd, 2); } void led_display_clear() { for (int i=LD_DIGIT0; i<=LD_DIGIT7; i++) { led_display_send_command(i, 0); } } void led_display_intensity(u8 value) { led_display_send_command(LD_INTENSITY, value); } void led_display_set_digit(u8 digit, u8 value, bool dot) { u8 digit_value = DIGIT_TABLE[value]; if (dot) { digit_value |= 0x80; } led_display_send_command(LD_DIGIT0 + digit, digit_value); } ================================================ FILE: rpi_bm/part14/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part14/src/mailbox.c ================================================ #include #include #include "printf.h" #include typedef struct { reg32 read; reg32 res[5]; reg32 status; reg32 config; reg32 write; } mailbox_regs; mailbox_regs *MBX() { return (mailbox_regs *)(PBASE + 0xB880); } typedef struct { u32 size; u32 code; u8 tags[0]; } property_buffer; static u32 property_data[8192] __attribute__((aligned(16))); #define MAIL_EMPTY 0x40000000 #define MAIL_FULL 0x80000000 #define MAIL_POWER 0x0 // Mailbox Channel 0: Power Management Interface #define MAIL_FB 0x1 // Mailbox Channel 1: Frame Buffer #define MAIL_VUART 0x2 // Mailbox Channel 2: Virtual UART #define MAIL_VCHIQ 0x3 // Mailbox Channel 3: VCHIQ Interface #define MAIL_LEDS 0x4 // Mailbox Channel 4: LEDs Interface #define MAIL_BUTTONS 0x5 // Mailbox Channel 5: Buttons Interface #define MAIL_TOUCH 0x6 // Mailbox Channel 6: Touchscreen Interface #define MAIL_COUNT 0x7 // Mailbox Channel 7: Counter #define MAIL_TAGS 0x8 // Mailbox Channel 8: Tags (ARM to VC) static void mailbox_write(u8 channel, u32 data) { while(MBX()->status & MAIL_FULL) ; MBX()->write = (data & 0xFFFFFFF0 | (channel & 0xF)); } static u32 mailbox_read(u8 channel) { while(true) { while(MBX()->status & MAIL_EMPTY) ; u32 data = MBX()->read; u8 read_channel = (u8)(data & 0xF); if (read_channel == channel) { return data & 0xFFFFFFF0; } } } bool mailbox_process(mailbox_tag *tag, u32 tag_size) { int buffer_size = tag_size + 12; memcpy(&property_data[2], tag, tag_size); property_buffer *buff = (property_buffer *)property_data; buff->size = buffer_size; buff->code = RPI_FIRMWARE_STATUS_REQUEST; property_data[(tag_size + 12) / 4 - 1] = RPI_FIRMWARE_PROPERTY_END; mailbox_write(MAIL_TAGS, (u32)(void *)property_data); int result = mailbox_read(MAIL_TAGS); memcpy(tag, property_data + 2, tag_size); return true; } bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value) { mailbox_generic mbx; mbx.tag.id = tag_id; mbx.tag.value_length = 0; mbx.tag.buffer_size = sizeof(mailbox_generic) - sizeof(mailbox_tag); mbx.id = id; mbx.value = *value; if (!mailbox_process((mailbox_tag *)&mbx, sizeof(mbx))) { printf("FAILED TO PROCESS: %X\n", tag_id); return false; } *value = mbx.value; return true; } u32 mailbox_clock_rate(clock_type ct) { mailbox_clock c; c.tag.id = RPI_FIRMWARE_GET_CLOCK_RATE; c.tag.value_length = 0; c.tag.buffer_size = sizeof(c) - sizeof(c.tag); c.id = ct; mailbox_process((mailbox_tag *)&c, sizeof(c)); return c.rate; } bool mailbox_power_check(u32 type) { mailbox_power p; p.tag.id = RPI_FIRMWARE_GET_DOMAIN_STATE; p.tag.value_length = 0; p.tag.buffer_size = sizeof(p) - sizeof(p.tag); p.id = type; p.state = ~0; mailbox_process((mailbox_tag *)&p, sizeof(p)); return p.state && p.state != ~0; } ================================================ FILE: rpi_bm/part14/src/mem.c ================================================ #include void *memcpy(void *dest, const void *src, u32 n) { //simple implementation... u8 *bdest = (u8 *)dest; u8 *bsrc = (u8 *)src; for (int i=0; ienables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part14/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part14/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part14/src/spi.c ================================================ #include "spi.h" #include "peripherals/spi.h" #include "gpio.h" #include "printf.h" void spi_init() { gpio_pin_set_func(7, GFAlt0); //CS1 gpio_pin_set_func(8, GFAlt0); //CS0 -> CS (red) gpio_pin_set_func(9, GFAlt0); //MISO gpio_pin_set_func(10, GFAlt0);//MOSI -> DIN (brown) gpio_pin_set_func(11, GFAlt0);//SCLK -> CLK (orange) gpio_pin_enable(7); gpio_pin_enable(8); gpio_pin_enable(9); gpio_pin_enable(10); gpio_pin_enable(11); } void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size) { REGS_SPI0->data_length = size; REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_CS) | (chip_select << CS_CS__SHIFT) | CS_CLEAR_RX | CS_CLEAR_TX | CS_TA; u32 read_count = 0; u32 write_count = 0; while(read_count < size || write_count < size) { while(write_count < size && REGS_SPI0->cs & CS_TXD) { if (sbuffer) { REGS_SPI0->fifo = *sbuffer++; } else { REGS_SPI0->fifo = 0; } write_count++; } while(read_count < size && REGS_SPI0->cs & CS_RXD) { u32 data = REGS_SPI0->fifo; if (rbuffer) { *rbuffer++ = data; } read_count++; } } while(!(REGS_SPI0->cs & CS_DONE)) { while(REGS_SPI0->cs & CS_RXD) { u32 r = REGS_SPI0->fifo; printf("Left Over: %d\n", r); } } REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_TA); } void spi_send(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, data, 0, size); } void spi_recv(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, 0, data, size); } ================================================ FILE: rpi_bm/part14/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part14/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part14/src/video.c ================================================ #include "mailbox.h" #include "printf.h" #include "timer.h" #include "video.h" typedef struct { mailbox_tag tag; u32 xres; u32 yres; } mailbox_fb_size; typedef struct { mailbox_tag tag; u32 bpp; } mailbox_fb_depth; typedef struct { mailbox_tag tag; u32 pitch; } mailbox_fb_pitch; typedef struct { mailbox_tag tag; u32 base; u32 screen_size; } mailbox_fb_buffer; typedef struct { mailbox_fb_size res; mailbox_fb_size vres; //virtual resolution.. mailbox_fb_depth depth; mailbox_fb_buffer buff; mailbox_fb_pitch pitch; } mailbox_fb_request; static mailbox_fb_request fb_req; void video_set_resolution(u32 xres, u32 yres, u32 bpp) { mailbox_fb_request req; fb_req.res.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT; fb_req.res.tag.buffer_size = 8; fb_req.res.tag.value_length = 8; fb_req.res.xres = xres; fb_req.res.yres = yres; fb_req.vres.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT; fb_req.vres.tag.buffer_size = 8; fb_req.vres.tag.value_length = 8; fb_req.vres.xres = xres; fb_req.vres.yres = yres; fb_req.depth.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH; fb_req.depth.tag.buffer_size = 4; fb_req.depth.tag.value_length = 4; fb_req.depth.bpp = bpp; fb_req.buff.tag.id = RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE; fb_req.buff.tag.buffer_size = 8; fb_req.buff.tag.value_length = 4; fb_req.buff.base = 16; fb_req.buff.screen_size = 0; fb_req.pitch.tag.id = RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH; fb_req.pitch.tag.buffer_size = 4; fb_req.pitch.tag.value_length = 4; fb_req.pitch.pitch = 0; //sets the actual resolution mailbox_process((mailbox_tag *)&fb_req, sizeof(fb_req)); printf("Allocated Buffer: %X - %d\n", fb_req.buff.base, fb_req.buff.screen_size); timer_sleep(2000); //draw some text showing what resolution is... char res[64]; sprintf(res, "Resolution: %d x %d", xres, yres); video_draw_string(res, 20, 20); //upper left corner. //draw a blue box with a red box inside it on the screen... u32 square_margin = 100; //blue margin around red center square... u64 ms_start = timer_get_ticks() / 1000; //get ticks in ms before drawing on screen... for (int y=0; y square_margin && yres - y > square_margin) && (x > square_margin && xres - x > square_margin); video_draw_pixel(x, y, draw_square ? 0xAA0000FF : 0x0055BBFF); } } u64 ms_end = timer_get_ticks() / 1000; //ms ticks when done... sprintf(res, "Screen draw took %d ms (%d secs)", (ms_end - ms_start), (ms_end - ms_start) / 1000); video_draw_string(res, 20, 40); printf("DONE\n"); timer_sleep(2000); } void video_draw_pixel(u32 x, u32 y, u32 color) { volatile u8 *frame_buffer = (u8 *)((fb_req.buff.base | 0x40000000) & ~0xC0000000); u32 pixel_offset = (x * (32 >> 3)) + (y * fb_req.pitch.pitch); if (fb_req.depth.bpp == 32) { u8 r = (color & 0xFF000000) >> 24; u8 g = (color & 0xFF0000) >> 16; u8 b = (color & 0xFF00) >> 8; u8 a = color & 0xFF; frame_buffer[pixel_offset++] = b; frame_buffer[pixel_offset++] = g; frame_buffer[pixel_offset++] = r; frame_buffer[pixel_offset++] = a; } else { frame_buffer[pixel_offset++] = (color >> 8) & 0xFF; frame_buffer[pixel_offset++] = (color & 0xFF); } } #define TEXT_COLOR 0xFFFFFFFF #define BACK_COLOR 0x0055BBFF void video_draw_char(char c, u32 pos_x, u32 pos_y) { for (int y=0; y #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part15/include/common.h ================================================ #pragma once #include #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part15/include/dma.h ================================================ #pragma once #include typedef struct { u32 channel; dma_control_block *block; bool status; } dma_channel; typedef enum { CT_NONE = -1, CT_NORMAL = 0x81 } dma_channel_type; dma_channel *dma_open_channel(u32 channel); void dma_close_channel(dma_channel *channel); void dma_setup_mem_copy(dma_channel *channel, void *dest, void *src, u32 length, u32 burst_length); void dma_start(dma_channel *channel); bool dma_wait(dma_channel *channel); ================================================ FILE: rpi_bm/part15/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part15/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part15/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part15/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part15/include/lcd.h ================================================ #pragma once #include "common.h" //HD44780 Datasheet //https://image.dfrobot.com/image/data/DFR0154/LCD2004%20hd44780%20Datasheet.pdf void lcd_init(u8 address); void lcd_backlight(bool on); void lcd_print(char *s); void lcd_send(u8 data, u8 mode); void lcd_command(u8 command); ================================================ FILE: rpi_bm/part15/include/led_display.h ================================================ #pragma once #include "common.h" void led_display_init(); void led_display_send_command(u8 opcode, u8 data); void led_display_clear(); void led_display_intensity(u8 value); void led_display_set_digit(u8 digit, u8 value, bool dot); void led_display_set_value(int value); typedef enum { LD_NOOP = 0, LD_DIGIT0, LD_DIGIT1, LD_DIGIT2, LD_DIGIT3, LD_DIGIT4, LD_DIGIT5, LD_DIGIT6, LD_DIGIT7, LD_DECODE_MODE, LD_INTENSITY, LD_SCANLIMIT, LD_SHUTDOWN, LD_DISPLAYTEST = 15 } led_display_opcodes; ================================================ FILE: rpi_bm/part15/include/mailbox.h ================================================ #pragma once #include "common.h" typedef struct { u32 id; u32 buffer_size; u32 value_length; } mailbox_tag; typedef struct { u32 size; void *tag; } mailbox_command; typedef struct { mailbox_tag tag; u32 id; u32 value; } mailbox_generic; typedef struct { mailbox_tag tag; u32 id; u32 state; } mailbox_power; typedef struct { mailbox_tag tag; u32 id; u32 rate; } mailbox_clock; typedef enum { CT_EMMC = 1, CT_UART = 2, CT_ARM = 3, CT_CORE = 4 } clock_type; #define RPI_POWER_DOMAIN_I2C0 0 #define RPI_POWER_DOMAIN_I2C1 1 #define RPI_POWER_DOMAIN_I2C2 2 #define RPI_POWER_DOMAIN_VIDEO_SCALER 3 #define RPI_POWER_DOMAIN_VPU1 4 #define RPI_POWER_DOMAIN_HDMI 5 #define RPI_POWER_DOMAIN_USB 6 #define RPI_POWER_DOMAIN_VEC 7 #define RPI_POWER_DOMAIN_JPEG 8 #define RPI_POWER_DOMAIN_H264 9 #define RPI_POWER_DOMAIN_V3D 10 #define RPI_POWER_DOMAIN_ISP 11 #define RPI_POWER_DOMAIN_UNICAM0 12 #define RPI_POWER_DOMAIN_UNICAM1 13 #define RPI_POWER_DOMAIN_CCP2RX 14 #define RPI_POWER_DOMAIN_CSI2 15 #define RPI_POWER_DOMAIN_CPI 16 #define RPI_POWER_DOMAIN_DSI0 17 #define RPI_POWER_DOMAIN_DSI1 18 #define RPI_POWER_DOMAIN_TRANSPOSER 19 #define RPI_POWER_DOMAIN_CCP2TX 20 #define RPI_POWER_DOMAIN_CDP 21 #define RPI_POWER_DOMAIN_ARM 22 #define RPI_POWER_DOMAIN_COUNT 23 enum rpi_firmware_property_status { RPI_FIRMWARE_STATUS_REQUEST = 0, RPI_FIRMWARE_STATUS_SUCCESS = 0x80000000, RPI_FIRMWARE_STATUS_ERROR = 0x80000001, }; enum rpi_firmware_property_tag { RPI_FIRMWARE_PROPERTY_END = 0, RPI_FIRMWARE_GET_FIRMWARE_REVISION = 0x00000001, RPI_FIRMWARE_SET_CURSOR_INFO = 0x00008010, RPI_FIRMWARE_SET_CURSOR_STATE = 0x00008011, RPI_FIRMWARE_GET_BOARD_MODEL = 0x00010001, RPI_FIRMWARE_GET_BOARD_REVISION = 0x00010002, RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 0x00010003, RPI_FIRMWARE_GET_BOARD_SERIAL = 0x00010004, RPI_FIRMWARE_GET_ARM_MEMORY = 0x00010005, RPI_FIRMWARE_GET_VC_MEMORY = 0x00010006, RPI_FIRMWARE_GET_CLOCKS = 0x00010007, RPI_FIRMWARE_GET_POWER_STATE = 0x00020001, RPI_FIRMWARE_GET_TIMING = 0x00020002, RPI_FIRMWARE_SET_POWER_STATE = 0x00028001, RPI_FIRMWARE_GET_CLOCK_STATE = 0x00030001, RPI_FIRMWARE_GET_CLOCK_RATE = 0x00030002, RPI_FIRMWARE_GET_VOLTAGE = 0x00030003, RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 0x00030004, RPI_FIRMWARE_GET_MAX_VOLTAGE = 0x00030005, RPI_FIRMWARE_GET_TEMPERATURE = 0x00030006, RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 0x00030007, RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008, RPI_FIRMWARE_GET_TURBO = 0x00030009, RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a, RPI_FIRMWARE_GET_STC = 0x0003000b, RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c, RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d, RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e, RPI_FIRMWARE_RELEASE_MEMORY = 0x0003000f, RPI_FIRMWARE_EXECUTE_CODE = 0x00030010, RPI_FIRMWARE_EXECUTE_QPU = 0x00030011, RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012, RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014, RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020, RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021, RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030, RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001, RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002, RPI_FIRMWARE_SET_VOLTAGE = 0x00038003, RPI_FIRMWARE_SET_TURBO = 0x00038009, RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021, RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030, RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041, RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041, RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042, RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043, RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043, RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045, RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, /* Dispmanx TAGS */ RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, RPI_FIRMWARE_FRAMEBUFFER_BLANK = 0x00040002, RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 0x00040005, RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 0x00040006, RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 0x00040007, RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 0x00040008, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009, RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a, RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b, RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f, RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010, RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001, RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005, RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 0x00044006, RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 0x00044007, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009, RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a, RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b, RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e, RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005, RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 0x00048006, RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 0x00048007, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009, RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a, RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b, RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f, RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020, RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e, RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f, RPI_FIRMWARE_VCHIQ_INIT = 0x00048010, RPI_FIRMWARE_GET_COMMAND_LINE = 0x00050001, RPI_FIRMWARE_GET_DMA_CHANNELS = 0x00060001, }; u32 mailbox_clock_rate(clock_type ct); bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value); bool mailbox_power_check(u32 type); bool mailbox_process(mailbox_tag *tag, u32 tag_size); ================================================ FILE: rpi_bm/part15/include/mem.h ================================================ #pragma once #include "common.h" void *memcpy(void *dest, const void *src, u32 n); #define GPU_CACHED_BASE 0x40000000 #define GPU_UNCACHED_BASE 0xC0000000 #define GPU_MEM_BASE GPU_UNCACHED_BASE #define BUS_ADDRESS(addr) (((addr) & ~0xC0000000) | GPU_MEM_BASE) ================================================ FILE: rpi_bm/part15/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part15/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part15/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part15/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part15/include/peripherals/dma.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" typedef struct { u32 transfer_info; u32 src_addr; u32 dest_addr; u32 transfer_length; u32 mode_2d_stride; u32 next_block_addr; u32 res[2]; } dma_control_block; typedef struct { u32 control; u32 control_block_addr; dma_control_block block; } dma_channel_regs; #define REGS_DMA(channel) ((dma_channel_regs *)(PBASE + 0x00007000 + (channel * 0x100))) #define REGS_DMA_INT_STATUS *((volatile u32 *)(PBASE + 0x00007FE0)) #define REGS_DMA_ENABLE *((volatile u32 *)(PBASE + 0x00007FF0)) //defines for differnet bits of the control and transfer info #define CS_RESET (1 << 31) #define CS_ABORT (1 << 30) #define CS_WAIT_FOR_OUTSTANDING_WRITES (1 << 28) #define CS_PANIC_PRIORITY_SHIFT 20 #define DEFAULT_PANIC_PRIORITY 15 #define CS_PRIORITY_SHIFT 16 #define DEFAULT_PRIORITY 1 #define CS_ERROR (1 << 8) #define CS_INT (1 << 2) #define CS_END (1 << 1) #define CS_ACTIVE (1 << 0) #define TI_PERMAP_SHIFT 16 #define TI_BURST_LENGTH_SHIFT 12 #define DEFAULT_BURST_LENGTH 0 #define TI_SRC_IGNORE (1 << 11) #define TI_SRC_DREQ (1 << 10) #define TI_SRC_WIDTH (1 << 9) #define TI_SRC_INC (1 << 8) #define TI_DEST_DREQ (1 << 6) #define TI_DEST_WIDTH (1 << 5) #define TI_DEST_INC (1 << 4) #define TI_WAIT_RESP (1 << 3) #define TI_TDMODE (1 << 1) #define TI_INTEN (1 << 0) ================================================ FILE: rpi_bm/part15/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part15/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part15/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part15/include/peripherals/spi.h ================================================ #pragma once #include "common.h" struct Spi0Regs { reg32 cs; reg32 fifo; reg32 clock; reg32 data_length; reg32 ltoh; reg32 dc; }; #define REGS_SPI0 ((struct Spi0Regs *)(PBASE + 0x00204000)) // CS Register #define CS_LEN_LONG (1 << 25) #define CS_DMA_LEN (1 << 24) #define CS_CSPOL2 (1 << 23) #define CS_CSPOL1 (1 << 22) #define CS_CSPOL0 (1 << 21) #define CS_RXF (1 << 20) #define CS_RXR (1 << 19) #define CS_TXD (1 << 18) #define CS_RXD (1 << 17) #define CS_DONE (1 << 16) #define CS_LEN (1 << 13) #define CS_REN (1 << 12) #define CS_ADCS (1 << 11) #define CS_INTR (1 << 10) #define CS_INTD (1 << 9) #define CS_DMAEN (1 << 8) #define CS_TA (1 << 7) #define CS_CSPOL (1 << 6) #define CS_CLEAR_RX (1 << 5) #define CS_CLEAR_TX (1 << 4) #define CS_CPOL__SHIFT 3 #define CS_CPHA__SHIFT 2 #define CS_CS (1 << 0) #define CS_CS__SHIFT 0 ================================================ FILE: rpi_bm/part15/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part15/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part15/include/spi.h ================================================ #pragma once #include "common.h" void spi_init(); void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size); void spi_send(u8 chip_select, u8 *data, u32 size); void spi_recv(u8 chip_select, u8 *data, u32 size); ================================================ FILE: rpi_bm/part15/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part15/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part15/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part15/include/video.h ================================================ #pragma once #include "common.h" void video_set_resolution(u32 xres, u32 yres, u32 bpp); void video_draw_char(char c, u32 pox_x, u32 pos_y); void video_draw_string(char *s, u32 pos_x, u32 pos_y); void video_draw_pixel(u32 x, u32 y, u32 color); void video_clear(); void video_dma(); //comes from fontData.c u32 font_get_height(); u32 font_get_width(); bool font_get_pixel(char ch, u32 x, u32 y); ================================================ FILE: rpi_bm/part15/square_margin ================================================ ================================================ FILE: rpi_bm/part15/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part15/src/dma.c ================================================ #include #include #include #include #include dma_channel channels[15]; static u16 channel_map = 0x1F35; static u16 allocate_channel(u32 channel) { if (!(channel & ~0x0F)) { if (channel_map & (1 << channel)) { channel_map &= ~(1 << channel); return channel; } return -1; } u16 i = channel == CT_NORMAL ? 6 : 12; for (; i >= 0; i--) { if (channel_map & (1 << i)) { channel_map &= ~(1 << i); return i; } } return CT_NONE; } dma_channel *dma_open_channel(u32 channel) { u32 _channel = allocate_channel(channel); if (_channel == CT_NONE) { printf("INVALID CHANNEL! %d\n", channel); return 0; } dma_channel *dma = (dma_channel *)&channels[_channel]; dma->channel = _channel; //LOW_MEMORY = bottom of RAM... Hack for now since no allocate function dma->block = (dma_control_block *)((LOW_MEMORY + 31) & ~31); dma->block->res[0] = 0; dma->block->res[1] = 0; REGS_DMA_ENABLE |= (1 << dma->channel); timer_sleep(3); REGS_DMA(dma->channel)->control |= CS_RESET; while(REGS_DMA(dma->channel)->control & CS_RESET) ; return dma; } void dma_close_channel(dma_channel *channel) { channel_map |= (1 << channel->channel); } void dma_setup_mem_copy(dma_channel *channel, void *dest, void *src, u32 length, u32 burst_length) { channel->block->transfer_info = (burst_length << TI_BURST_LENGTH_SHIFT) | TI_SRC_WIDTH | TI_SRC_INC | TI_DEST_WIDTH | TI_DEST_INC; channel->block->src_addr = (u32)src; channel->block->dest_addr = (u32)dest; channel->block->transfer_length = length; channel->block->mode_2d_stride = 0; channel->block->next_block_addr = 0; } void dma_start(dma_channel *channel) { REGS_DMA(channel->channel)->control_block_addr = BUS_ADDRESS((u32)channel->block); REGS_DMA(channel->channel)->control = CS_WAIT_FOR_OUTSTANDING_WRITES | (DEFAULT_PANIC_PRIORITY << CS_PANIC_PRIORITY_SHIFT) | (DEFAULT_PRIORITY << CS_PRIORITY_SHIFT) | CS_ACTIVE; } bool dma_wait(dma_channel *channel) { while(REGS_DMA(channel->channel)->control & CS_ACTIVE) ; channel->status = REGS_DMA(channel->channel)->control & CS_ERROR ? false : true; return channel->status; } ================================================ FILE: rpi_bm/part15/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part15/src/fontData.c ================================================ // lat1-16 console font (ISO-8859-1) // // Taken from the Linux "kbd - Keyboard and Font Utilities" package // by Andries Brouwer // Alexey Gladkov // Portions by Paul Gortmaker // Licensed under GPLv2+ // #include "common.h" static const unsigned width = 8; static const unsigned height = 16; static const unsigned extraheight = 3; static const unsigned char font_data[224][16] = { {0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0x7C, 0x16, 0x16, 0xD6, 0x7C, 0x10, 0x10, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6, 0xE6, 0xE6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE, 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x64, 0x38, 0x0C, 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00}, {0x00, 0x30, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0xD0, 0xD6, 0x7C, 0x10, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x60, 0x60, 0xF0, 0x60, 0x60, 0x66, 0xF6, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC6, 0x7C, 0x6C, 0x6C, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0x99, 0xA5, 0xA1, 0xA5, 0x99, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5, 0xA5, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x30, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF6, 0xC0, 0xC0, 0xC0, 0x00}, {0x00, 0x00, 0x7F, 0xD6, 0xD6, 0x76, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x6C, 0x38, 0x00}, {0x30, 0x70, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x6E, 0xDB, 0x06, 0x0C, 0x1F, 0x00, 0x00, 0x00}, {0x70, 0xD8, 0x30, 0xD8, 0x76, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, 0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3E, 0x78, 0xD8, 0xD8, 0xFC, 0xD8, 0xD8, 0xD8, 0xD8, 0xDE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x0C, 0x66, 0x3C, 0x00}, {0x60, 0x30, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x08, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x18, 0x3C, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0xF6, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC6, 0xCE, 0xCE, 0xDE, 0xF6, 0xE6, 0xE6, 0xC6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xCC, 0xC6, 0xC6, 0xC6, 0xD6, 0xDC, 0x80, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0x1B, 0x7F, 0xD8, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x18, 0x6C, 0x38, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x78, 0x30, 0x78, 0x0C, 0x7E, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xCE, 0xDE, 0xFE, 0xF6, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00} }; #define FIRSTCHAR 0x21 #define LASTCHAR 0xFF #define CHARCOUNT (LASTCHAR - FIRSTCHAR + 1) u32 font_get_height() { return height + extraheight; } u32 font_get_width() { return width; } bool font_get_pixel(char ch, u32 x, u32 y) { if (ch < FIRSTCHAR || ch > LASTCHAR) { return false; } u32 index = ch - FIRSTCHAR; if (y >= height) { return false; } return font_data[index][y] & (0x80 >> x) ? true : false; } ================================================ FILE: rpi_bm/part15/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part15/src/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part15/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part15/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part15/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" #include "spi.h" #include "led_display.h" #include "mailbox.h" #include "video.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (u8 i=0x20; i<0x30; i++) { if (i2c_send(i, &i, 1) == I2CS_SUCCESS) { //we know there is an i2c device here now. printf("Found device at address 0x%X\n", i); } } printf("Initializing SPI...\n"); spi_init(); printf("MAILBOX:\n"); printf("CORE CLOCK: %d\n", mailbox_clock_rate(CT_CORE)); printf("EMMC CLOCK: %d\n", mailbox_clock_rate(CT_EMMC)); printf("UART CLOCK: %d\n", mailbox_clock_rate(CT_UART)); printf("ARM CLOCK: %d\n", mailbox_clock_rate(CT_ARM)); printf("I2C POWER STATE:\n"); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(2000); for (int i=0; i<3; i++) { u32 on = 1; mailbox_generic_command(RPI_FIRMWARE_SET_DOMAIN_STATE, i, &on); printf("SET POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(1000); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } u32 max_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_MAX_TEMPERATURE, 0, &max_temp); //Do video... video_init(); printf("NO DMA...\n"); video_set_dma(false); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 32); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 32); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 32); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 8); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 8); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 8); printf("YES DMA...\n"); video_set_dma(true); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 32); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 32); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 32); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 8); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 8); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 8); while(1) { u32 cur_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_TEMPERATURE, 0, &cur_temp); printf("Cur temp: %dC MAX: %dC\n", cur_temp / 1000, max_temp / 1000); timer_sleep(1000); } } ================================================ FILE: rpi_bm/part15/src/lcd.c ================================================ #include "lcd.h" #include "i2c.h" #include "timer.h" #include "printf.h" /* P0 -> RS P1 -> RW P2 -> E P3 -> BT (Backlight) P4 -> D4 P5 -> D5 P6 -> D6 P7 -> D7 */ typedef enum Flags { FLAG_RS = 1, FLAG_RW = 2, FLAG_EN = 4 }; // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 #define LCD_BACKLIGHT 8 #define LCD_NOBACKLIGHT 0 static u8 _backlight = LCD_BACKLIGHT; static u8 _lcd_address = 0; static void write_i2c(u8 data) { u8 value = data | _backlight; i2c_send(_lcd_address, &value, 1); } //page 33 static void pulse(u8 data) { write_i2c(data | FLAG_EN); timer_sleep(5); write_i2c(data & ~FLAG_EN); timer_sleep(1); } static void write_4bits(u8 data) { write_i2c(data); pulse(data); } void lcd_send(u8 data, u8 mode) { write_4bits((data & 0xF0) | mode); write_4bits(((data << 4) & 0xF0) | mode); } void lcd_command(u8 command) { lcd_send(command, 0); } void lcd_init(u8 address) { _lcd_address = address; //page 46 write_4bits(3 << 4); timer_sleep(5); write_4bits(3 << 4); timer_sleep(1); write_4bits(3 << 4); write_4bits(2 << 4); lcd_command(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE); lcd_command(LCD_DISPLAYCONTROL | LCD_DISPLAYON); lcd_command(LCD_CLEARDISPLAY); timer_sleep(2); lcd_command(LCD_ENTRYMODESET | LCD_ENTRYLEFT); lcd_command(LCD_RETURNHOME); timer_sleep(2); } void lcd_backlight(bool on) { if (on) { _backlight = LCD_BACKLIGHT; } else { _backlight = LCD_NOBACKLIGHT; } write_i2c(0); } //page 42 : 6 void lcd_print(char *s) { while(*s) { lcd_send(*s, FLAG_RS); s++; } } ================================================ FILE: rpi_bm/part15/src/led_display.c ================================================ #include "led_display.h" #include "spi.h" const static u8 DIGIT_TABLE [] = { 0b01111110,0b00110000,0b01101101,0b01111001,0b00110011,0b01011011,0b01011111,0b01110000, 0b01111111,0b01111011 }; void led_display_init() { led_display_send_command(LD_SCANLIMIT, 7); led_display_send_command(LD_DECODE_MODE, 0); led_display_send_command(LD_SHUTDOWN, 1); led_display_send_command(LD_INTENSITY, 0); led_display_send_command(LD_DISPLAYTEST, 0); led_display_intensity(5); } void led_display_send_command(u8 opcode, u8 data) { u8 cmd[2]; cmd[0] = opcode; cmd[1] = data; spi_send(0, cmd, 2); } void led_display_clear() { for (int i=LD_DIGIT0; i<=LD_DIGIT7; i++) { led_display_send_command(i, 0); } } void led_display_intensity(u8 value) { led_display_send_command(LD_INTENSITY, value); } void led_display_set_digit(u8 digit, u8 value, bool dot) { u8 digit_value = DIGIT_TABLE[value]; if (dot) { digit_value |= 0x80; } led_display_send_command(LD_DIGIT0 + digit, digit_value); } ================================================ FILE: rpi_bm/part15/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part15/src/mailbox.c ================================================ #include #include #include "printf.h" #include typedef struct { reg32 read; reg32 res[5]; reg32 status; reg32 config; reg32 write; } mailbox_regs; mailbox_regs *MBX() { return (mailbox_regs *)(PBASE + 0xB880); } typedef struct { u32 size; u32 code; u8 tags[0]; } property_buffer; static u32 property_data[8192] __attribute__((aligned(16))); #define MAIL_EMPTY 0x40000000 #define MAIL_FULL 0x80000000 #define MAIL_POWER 0x0 // Mailbox Channel 0: Power Management Interface #define MAIL_FB 0x1 // Mailbox Channel 1: Frame Buffer #define MAIL_VUART 0x2 // Mailbox Channel 2: Virtual UART #define MAIL_VCHIQ 0x3 // Mailbox Channel 3: VCHIQ Interface #define MAIL_LEDS 0x4 // Mailbox Channel 4: LEDs Interface #define MAIL_BUTTONS 0x5 // Mailbox Channel 5: Buttons Interface #define MAIL_TOUCH 0x6 // Mailbox Channel 6: Touchscreen Interface #define MAIL_COUNT 0x7 // Mailbox Channel 7: Counter #define MAIL_TAGS 0x8 // Mailbox Channel 8: Tags (ARM to VC) static void mailbox_write(u8 channel, u32 data) { while(MBX()->status & MAIL_FULL) ; MBX()->write = (data & 0xFFFFFFF0 | (channel & 0xF)); } static u32 mailbox_read(u8 channel) { while(true) { while(MBX()->status & MAIL_EMPTY) ; u32 data = MBX()->read; u8 read_channel = (u8)(data & 0xF); if (read_channel == channel) { return data & 0xFFFFFFF0; } } } bool mailbox_process(mailbox_tag *tag, u32 tag_size) { int buffer_size = tag_size + 12; memcpy(&property_data[2], tag, tag_size); property_buffer *buff = (property_buffer *)property_data; buff->size = buffer_size; buff->code = RPI_FIRMWARE_STATUS_REQUEST; property_data[(tag_size + 12) / 4 - 1] = RPI_FIRMWARE_PROPERTY_END; mailbox_write(MAIL_TAGS, (u32)(void *)property_data); int result = mailbox_read(MAIL_TAGS); memcpy(tag, property_data + 2, tag_size); return true; } bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value) { mailbox_generic mbx; mbx.tag.id = tag_id; mbx.tag.value_length = 0; mbx.tag.buffer_size = sizeof(mailbox_generic) - sizeof(mailbox_tag); mbx.id = id; mbx.value = *value; if (!mailbox_process((mailbox_tag *)&mbx, sizeof(mbx))) { printf("FAILED TO PROCESS: %X\n", tag_id); return false; } *value = mbx.value; return true; } u32 mailbox_clock_rate(clock_type ct) { mailbox_clock c; c.tag.id = RPI_FIRMWARE_GET_CLOCK_RATE; c.tag.value_length = 0; c.tag.buffer_size = sizeof(c) - sizeof(c.tag); c.id = ct; mailbox_process((mailbox_tag *)&c, sizeof(c)); return c.rate; } bool mailbox_power_check(u32 type) { mailbox_power p; p.tag.id = RPI_FIRMWARE_GET_DOMAIN_STATE; p.tag.value_length = 0; p.tag.buffer_size = sizeof(p) - sizeof(p.tag); p.id = type; p.state = ~0; mailbox_process((mailbox_tag *)&p, sizeof(p)); return p.state && p.state != ~0; } ================================================ FILE: rpi_bm/part15/src/mem.c ================================================ #include void *memcpy(void *dest, const void *src, u32 n) { //simple implementation... u8 *bdest = (u8 *)dest; u8 *bsrc = (u8 *)src; for (int i=0; ienables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part15/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part15/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part15/src/spi.c ================================================ #include "spi.h" #include "peripherals/spi.h" #include "gpio.h" #include "printf.h" void spi_init() { gpio_pin_set_func(7, GFAlt0); //CS1 gpio_pin_set_func(8, GFAlt0); //CS0 -> CS (red) gpio_pin_set_func(9, GFAlt0); //MISO gpio_pin_set_func(10, GFAlt0);//MOSI -> DIN (brown) gpio_pin_set_func(11, GFAlt0);//SCLK -> CLK (orange) gpio_pin_enable(7); gpio_pin_enable(8); gpio_pin_enable(9); gpio_pin_enable(10); gpio_pin_enable(11); } void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size) { REGS_SPI0->data_length = size; REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_CS) | (chip_select << CS_CS__SHIFT) | CS_CLEAR_RX | CS_CLEAR_TX | CS_TA; u32 read_count = 0; u32 write_count = 0; while(read_count < size || write_count < size) { while(write_count < size && REGS_SPI0->cs & CS_TXD) { if (sbuffer) { REGS_SPI0->fifo = *sbuffer++; } else { REGS_SPI0->fifo = 0; } write_count++; } while(read_count < size && REGS_SPI0->cs & CS_RXD) { u32 data = REGS_SPI0->fifo; if (rbuffer) { *rbuffer++ = data; } read_count++; } } while(!(REGS_SPI0->cs & CS_DONE)) { while(REGS_SPI0->cs & CS_RXD) { u32 r = REGS_SPI0->fifo; printf("Left Over: %d\n", r); } } REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_TA); } void spi_send(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, data, 0, size); } void spi_recv(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, 0, data, size); } ================================================ FILE: rpi_bm/part15/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part15/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part15/src/video.c ================================================ #include "mailbox.h" #include "printf.h" #include "timer.h" #include "video.h" #include "dma.h" #include "mm.h" typedef struct { mailbox_tag tag; u32 xres; u32 yres; } mailbox_fb_size; typedef struct { mailbox_tag tag; u32 bpp; } mailbox_fb_depth; typedef struct { mailbox_tag tag; u32 pitch; } mailbox_fb_pitch; typedef struct { mailbox_tag tag; u32 base; u32 screen_size; } mailbox_fb_buffer; typedef struct { mailbox_fb_size res; mailbox_fb_size vres; //virtual resolution.. mailbox_fb_depth depth; mailbox_fb_buffer buff; mailbox_fb_pitch pitch; } mailbox_fb_request; static mailbox_fb_request fb_req; static dma_channel *dma; static u8 *vid_buffer; static u32 *bg32_buffer; static u32 *bg8_buffer; #define TEXT_COLOR 0xFFFFFFFF #define BACK_COLOR 0xFF0055BB #define MB (1024 * 1024) //hack for not having an allocate function yet... #define BG32_MEM_LOCATION (LOW_MEMORY + (10 * MB)) #define BG8_MEM_LOCATION (BG32_MEM_LOCATION + (10 * MB)) #define VB_MEM_LOCATION (BG8_MEM_LOCATION + (4 * MB)) void video_init() { dma = dma_open_channel(CT_NORMAL); vid_buffer = (u8 *)VB_MEM_LOCATION; printf("DMA CHANNEL: %d\n", dma->channel); printf("VID BUFF: %X\n", vid_buffer); bg32_buffer = (u32 *)BG32_MEM_LOCATION; bg8_buffer = (u32 *)BG8_MEM_LOCATION; for (int i=0; i<(10 * MB) / 4; i++) { bg32_buffer[i] = BACK_COLOR; } for (int i=0; i<(4 * MB) / 4; i++) { bg8_buffer[i] = 0x01010101; } } static bool use_dma = false; #define BUS_ADDR(x) (((u64)x | 0x40000000) & ~0xC0000000) #define FRAMEBUFFER ((volatile u8 *)BUS_ADDR(fb_req.buff.base)) #define DMABUFFER ((volatile u8 *)vid_buffer) #define DRAWBUFFER (use_dma ? DMABUFFER : FRAMEBUFFER) void video_set_dma(bool b) { use_dma = b; } void do_dma(void *dest, void *src, u32 total) { u32 ms_start = timer_get_ticks() / 1000; u32 start = 0; while(total > 0) { int num_bytes = total; if (num_bytes > 0xFFFFFF) { num_bytes = 0xFFFFFF; } dma_setup_mem_copy(dma, dest + start, src + start, num_bytes, 2); dma_start(dma); dma_wait(dma); start += num_bytes; total -= num_bytes; } u32 ms_end = timer_get_ticks() / 1000; //ms ticks when done... printf("DMA took %d ms\n", (ms_end - ms_start)); } void video_dma() { do_dma(FRAMEBUFFER, DMABUFFER, fb_req.buff.screen_size); } typedef struct { mailbox_tag tag; u32 offset; u32 num_entries; u32 entries[8]; } mailbox_set_palette; void video_set_resolution(u32 xres, u32 yres, u32 bpp) { fb_req.res.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT; fb_req.res.tag.buffer_size = 8; fb_req.res.tag.value_length = 8; fb_req.res.xres = xres; fb_req.res.yres = yres; fb_req.vres.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT; fb_req.vres.tag.buffer_size = 8; fb_req.vres.tag.value_length = 8; fb_req.vres.xres = xres; fb_req.vres.yres = yres; fb_req.depth.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH; fb_req.depth.tag.buffer_size = 4; fb_req.depth.tag.value_length = 4; fb_req.depth.bpp = bpp; fb_req.buff.tag.id = RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE; fb_req.buff.tag.buffer_size = 8; fb_req.buff.tag.value_length = 4; fb_req.buff.base = 16; fb_req.buff.screen_size = 0; fb_req.pitch.tag.id = RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH; fb_req.pitch.tag.buffer_size = 4; fb_req.pitch.tag.value_length = 4; fb_req.pitch.pitch = 0; mailbox_set_palette palette; palette.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE; palette.tag.buffer_size = 40; palette.tag.value_length = 0; palette.offset = 0; palette.num_entries = 8; palette.entries[0] = 0; palette.entries[1] = 0xFFBB5500; palette.entries[2] = 0xFFFFFFFF; palette.entries[3] = 0xFFFF0000; palette.entries[4] = 0xFF00FF00; palette.entries[5] = 0xFF0000FF; palette.entries[6] = 0x55555555; palette.entries[7] = 0xCCCCCCCC; //sets the actual resolution mailbox_process((mailbox_tag *)&fb_req, sizeof(fb_req)); printf("Allocated Buffer: %X - %d - %d\n", fb_req.buff.base, fb_req.buff.screen_size, fb_req.depth.bpp); if (bpp == 8) { mailbox_process((mailbox_tag *)&palette, sizeof(palette)); } //draw some text showing what resolution is... char res[64]; for (int i=0; i<4; i++) { u64 ms_start = timer_get_ticks() / 1000; //get ticks in ms before drawing on screen... if (fb_req.depth.bpp == 32) { if (!use_dma) { u32 *buff = (u32 *)FRAMEBUFFER; for (int i=0; i> 3)) + (y * fb_req.pitch.pitch); if (fb_req.depth.bpp == 32) { u32 *buff = (u32 *)DRAWBUFFER; buff[pixel_offset / 4] = color; } else if (fb_req.depth.bpp == 16) { u16 *buff = (u16 *)DRAWBUFFER; buff[pixel_offset / 2] = color & 0xFFFF; } else { DRAWBUFFER[pixel_offset++] = (color & 0xFF); } } void video_draw_char(char c, u32 pos_x, u32 pos_y) { u32 text_color = TEXT_COLOR; u32 back_color = BACK_COLOR; if (fb_req.depth.bpp == 8) { text_color = 2; back_color = 1; } for (int y=0; y #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part16/include/common.h ================================================ #pragma once #include #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; #define PACKED __attribute((__packed__)) ================================================ FILE: rpi_bm/part16/include/dma.h ================================================ #pragma once #include typedef struct { u32 channel; dma_control_block *block; bool status; } dma_channel; typedef enum { CT_NONE = -1, CT_NORMAL = 0x81 } dma_channel_type; dma_channel *dma_open_channel(u32 channel); void dma_close_channel(dma_channel *channel); void dma_setup_mem_copy(dma_channel *channel, void *dest, void *src, u32 length, u32 burst_length); void dma_start(dma_channel *channel); bool dma_wait(dma_channel *channel); ================================================ FILE: rpi_bm/part16/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part16/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part16/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part16/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part16/include/lcd.h ================================================ #pragma once #include "common.h" //HD44780 Datasheet //https://image.dfrobot.com/image/data/DFR0154/LCD2004%20hd44780%20Datasheet.pdf void lcd_init(u8 address); void lcd_backlight(bool on); void lcd_print(char *s); void lcd_send(u8 data, u8 mode); void lcd_command(u8 command); ================================================ FILE: rpi_bm/part16/include/led_display.h ================================================ #pragma once #include "common.h" void led_display_init(); void led_display_send_command(u8 opcode, u8 data); void led_display_clear(); void led_display_intensity(u8 value); void led_display_set_digit(u8 digit, u8 value, bool dot); void led_display_set_value(int value); typedef enum { LD_NOOP = 0, LD_DIGIT0, LD_DIGIT1, LD_DIGIT2, LD_DIGIT3, LD_DIGIT4, LD_DIGIT5, LD_DIGIT6, LD_DIGIT7, LD_DECODE_MODE, LD_INTENSITY, LD_SCANLIMIT, LD_SHUTDOWN, LD_DISPLAYTEST = 15 } led_display_opcodes; ================================================ FILE: rpi_bm/part16/include/mailbox.h ================================================ #pragma once #include "common.h" typedef struct { u32 id; u32 buffer_size; u32 value_length; } mailbox_tag; typedef struct { u32 size; void *tag; } mailbox_command; typedef struct { mailbox_tag tag; u32 id; u32 value; } mailbox_generic; typedef struct { mailbox_tag tag; u32 id; u32 state; } mailbox_power; typedef struct { mailbox_tag tag; u32 id; u32 rate; } mailbox_clock; typedef enum { CT_EMMC = 1, CT_UART = 2, CT_ARM = 3, CT_CORE = 4 } clock_type; #define RPI_POWER_DOMAIN_I2C0 0 #define RPI_POWER_DOMAIN_I2C1 1 #define RPI_POWER_DOMAIN_I2C2 2 #define RPI_POWER_DOMAIN_VIDEO_SCALER 3 #define RPI_POWER_DOMAIN_VPU1 4 #define RPI_POWER_DOMAIN_HDMI 5 #define RPI_POWER_DOMAIN_USB 6 #define RPI_POWER_DOMAIN_VEC 7 #define RPI_POWER_DOMAIN_JPEG 8 #define RPI_POWER_DOMAIN_H264 9 #define RPI_POWER_DOMAIN_V3D 10 #define RPI_POWER_DOMAIN_ISP 11 #define RPI_POWER_DOMAIN_UNICAM0 12 #define RPI_POWER_DOMAIN_UNICAM1 13 #define RPI_POWER_DOMAIN_CCP2RX 14 #define RPI_POWER_DOMAIN_CSI2 15 #define RPI_POWER_DOMAIN_CPI 16 #define RPI_POWER_DOMAIN_DSI0 17 #define RPI_POWER_DOMAIN_DSI1 18 #define RPI_POWER_DOMAIN_TRANSPOSER 19 #define RPI_POWER_DOMAIN_CCP2TX 20 #define RPI_POWER_DOMAIN_CDP 21 #define RPI_POWER_DOMAIN_ARM 22 #define RPI_POWER_DOMAIN_COUNT 23 enum rpi_firmware_property_status { RPI_FIRMWARE_STATUS_REQUEST = 0, RPI_FIRMWARE_STATUS_SUCCESS = 0x80000000, RPI_FIRMWARE_STATUS_ERROR = 0x80000001, }; enum rpi_firmware_property_tag { RPI_FIRMWARE_PROPERTY_END = 0, RPI_FIRMWARE_GET_FIRMWARE_REVISION = 0x00000001, RPI_FIRMWARE_SET_CURSOR_INFO = 0x00008010, RPI_FIRMWARE_SET_CURSOR_STATE = 0x00008011, RPI_FIRMWARE_GET_BOARD_MODEL = 0x00010001, RPI_FIRMWARE_GET_BOARD_REVISION = 0x00010002, RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 0x00010003, RPI_FIRMWARE_GET_BOARD_SERIAL = 0x00010004, RPI_FIRMWARE_GET_ARM_MEMORY = 0x00010005, RPI_FIRMWARE_GET_VC_MEMORY = 0x00010006, RPI_FIRMWARE_GET_CLOCKS = 0x00010007, RPI_FIRMWARE_GET_POWER_STATE = 0x00020001, RPI_FIRMWARE_GET_TIMING = 0x00020002, RPI_FIRMWARE_SET_POWER_STATE = 0x00028001, RPI_FIRMWARE_GET_CLOCK_STATE = 0x00030001, RPI_FIRMWARE_GET_CLOCK_RATE = 0x00030002, RPI_FIRMWARE_GET_VOLTAGE = 0x00030003, RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 0x00030004, RPI_FIRMWARE_GET_MAX_VOLTAGE = 0x00030005, RPI_FIRMWARE_GET_TEMPERATURE = 0x00030006, RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 0x00030007, RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008, RPI_FIRMWARE_GET_TURBO = 0x00030009, RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a, RPI_FIRMWARE_GET_STC = 0x0003000b, RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c, RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d, RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e, RPI_FIRMWARE_RELEASE_MEMORY = 0x0003000f, RPI_FIRMWARE_EXECUTE_CODE = 0x00030010, RPI_FIRMWARE_EXECUTE_QPU = 0x00030011, RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012, RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014, RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020, RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021, RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030, RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001, RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002, RPI_FIRMWARE_SET_VOLTAGE = 0x00038003, RPI_FIRMWARE_SET_TURBO = 0x00038009, RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021, RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030, RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041, RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041, RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042, RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043, RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043, RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045, RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, /* Dispmanx TAGS */ RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, RPI_FIRMWARE_FRAMEBUFFER_BLANK = 0x00040002, RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 0x00040005, RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 0x00040006, RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 0x00040007, RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 0x00040008, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009, RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a, RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b, RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f, RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010, RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001, RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005, RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 0x00044006, RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 0x00044007, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009, RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a, RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b, RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e, RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005, RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 0x00048006, RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 0x00048007, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009, RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a, RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b, RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f, RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020, RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e, RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f, RPI_FIRMWARE_VCHIQ_INIT = 0x00048010, RPI_FIRMWARE_GET_COMMAND_LINE = 0x00050001, RPI_FIRMWARE_GET_DMA_CHANNELS = 0x00060001, }; u32 mailbox_clock_rate(clock_type ct); bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value); bool mailbox_power_check(u32 type); bool mailbox_process(mailbox_tag *tag, u32 tag_size); ================================================ FILE: rpi_bm/part16/include/mem.h ================================================ #pragma once #include "common.h" void *memcpy(void *dest, const void *src, u32 n); #define GPU_CACHED_BASE 0x40000000 #define GPU_UNCACHED_BASE 0xC0000000 #define GPU_MEM_BASE GPU_UNCACHED_BASE #define BUS_ADDRESS(addr) (((addr) & ~0xC0000000) | GPU_MEM_BASE) void *get_free_pages(int num_pages); void *allocate_memory(int bytes); void free_memory(void *base); ================================================ FILE: rpi_bm/part16/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part16/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #define HIGH_MEMORY 0x40000000 #define PAGING_MEMORY (HIGH_MEMORY - LOW_MEMORY) #define PAGING_PAGES (PAGING_MEMORY/PAGE_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part16/include/mmu.h ================================================ #pragma once #define MM_TYPE_PAGE_TABLE 0x3 #define MM_TYPE_PAGE 0x3 #define MM_TYPE_BLOCK 0x1 #define MM_ACCESS (0x1 << 10) #define MM_ACCESS_PERMISSION (0x01 << 6) /* * Memory region attributes: * * n = AttrIndx[2:0] * n MAIR * DEVICE_nGnRnE 000 00000000 * NORMAL_NC 001 01000100 */ #define MT_DEVICE_nGnRnE 0x0 #define MT_NORMAL_NC 0x1 #define MT_DEVICE_nGnRnE_FLAGS 0x00 #define MT_NORMAL_NC_FLAGS 0x44 #define MAIR_VALUE (MT_DEVICE_nGnRnE_FLAGS << (8 * MT_DEVICE_nGnRnE)) | (MT_NORMAL_NC_FLAGS << (8 * MT_NORMAL_NC)) #define ATTRINDX_NORMAL 0 #define ATTRINDX_DEVICE 1 #define ATTRINDX_COHERENT 2 #define MAIR_VALUENEW (0xFF << ATTRINDX_NORMAL*8 \ | 0x04 << ATTRINDX_DEVICE*8 \ | 0x00 << ATTRINDX_COHERENT*8) #define MMU_FLAGS (MM_TYPE_BLOCK | (MT_NORMAL_NC << 2) | MM_ACCESS) #define MMU_DEVICE_FLAGS (MM_TYPE_BLOCK | (MT_DEVICE_nGnRnE << 2) | MM_ACCESS) #define MMU_PTE_FLAGS (MM_TYPE_PAGE | (MT_NORMAL_NC << 2) | MM_ACCESS | MM_ACCESS_PERMISSION) #define TCR_T0SZ (64 - 48) #define TCR_T1SZ ((64 - 48) << 16) #define TCR_TG0_4K (0 << 14) #define TCR_TG1_4K (2 << 30) #define TCR_VALUE (TCR_T0SZ | TCR_T1SZ | TCR_TG0_4K | TCR_TG1_4K) // System registers #define SCTLR_EL1_WXN (1 << 19) // SCTLR_EL1 #define SCTLR_EL1_I (1 << 12) #define SCTLR_EL1_C (1 << 2) #define SCTLR_EL1_A (1 << 1) #define SCTLR_EL1_M (1 << 0) ================================================ FILE: rpi_bm/part16/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part16/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #define DEVICE_START 0x3B400000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #define DEVICE_START 0xFC000000 #else #define PBASE 0 #define DEVICE_START 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part16/include/peripherals/dma.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" typedef struct { u32 transfer_info; u32 src_addr; u32 dest_addr; u32 transfer_length; u32 mode_2d_stride; u32 next_block_addr; u32 res[2]; } dma_control_block; typedef struct { u32 control; u32 control_block_addr; dma_control_block block; } dma_channel_regs; #define REGS_DMA(channel) ((dma_channel_regs *)(PBASE + 0x00007000 + (channel * 0x100))) #define REGS_DMA_INT_STATUS *((volatile u32 *)(PBASE + 0x00007FE0)) #define REGS_DMA_ENABLE *((volatile u32 *)(PBASE + 0x00007FF0)) //defines for differnet bits of the control and transfer info #define CS_RESET (1 << 31) #define CS_ABORT (1 << 30) #define CS_WAIT_FOR_OUTSTANDING_WRITES (1 << 28) #define CS_PANIC_PRIORITY_SHIFT 20 #define DEFAULT_PANIC_PRIORITY 15 #define CS_PRIORITY_SHIFT 16 #define DEFAULT_PRIORITY 1 #define CS_ERROR (1 << 8) #define CS_INT (1 << 2) #define CS_END (1 << 1) #define CS_ACTIVE (1 << 0) #define TI_PERMAP_SHIFT 16 #define TI_BURST_LENGTH_SHIFT 12 #define DEFAULT_BURST_LENGTH 0 #define TI_SRC_IGNORE (1 << 11) #define TI_SRC_DREQ (1 << 10) #define TI_SRC_WIDTH (1 << 9) #define TI_SRC_INC (1 << 8) #define TI_DEST_DREQ (1 << 6) #define TI_DEST_WIDTH (1 << 5) #define TI_DEST_INC (1 << 4) #define TI_WAIT_RESP (1 << 3) #define TI_TDMODE (1 << 1) #define TI_INTEN (1 << 0) ================================================ FILE: rpi_bm/part16/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part16/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part16/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part16/include/peripherals/spi.h ================================================ #pragma once #include "common.h" struct Spi0Regs { reg32 cs; reg32 fifo; reg32 clock; reg32 data_length; reg32 ltoh; reg32 dc; }; #define REGS_SPI0 ((struct Spi0Regs *)(PBASE + 0x00204000)) // CS Register #define CS_LEN_LONG (1 << 25) #define CS_DMA_LEN (1 << 24) #define CS_CSPOL2 (1 << 23) #define CS_CSPOL1 (1 << 22) #define CS_CSPOL0 (1 << 21) #define CS_RXF (1 << 20) #define CS_RXR (1 << 19) #define CS_TXD (1 << 18) #define CS_RXD (1 << 17) #define CS_DONE (1 << 16) #define CS_LEN (1 << 13) #define CS_REN (1 << 12) #define CS_ADCS (1 << 11) #define CS_INTR (1 << 10) #define CS_INTD (1 << 9) #define CS_DMAEN (1 << 8) #define CS_TA (1 << 7) #define CS_CSPOL (1 << 6) #define CS_CLEAR_RX (1 << 5) #define CS_CLEAR_TX (1 << 4) #define CS_CPOL__SHIFT 3 #define CS_CPHA__SHIFT 2 #define CS_CS (1 << 0) #define CS_CS__SHIFT 0 ================================================ FILE: rpi_bm/part16/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part16/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part16/include/spi.h ================================================ #pragma once #include "common.h" void spi_init(); void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size); void spi_send(u8 chip_select, u8 *data, u32 size); void spi_recv(u8 chip_select, u8 *data, u32 size); ================================================ FILE: rpi_bm/part16/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) #define ESR_ELx_EC_SHIFT 26 #define ESR_ELx_EC_SVC64 0x15 #define ESR_ELx_EC_DABT_LOW 0x24 /* Holds the saved process state when an exception is taken to EL3 */ #define SPSR_EL3_D (1 << 9) // debug exception mask #define SPSR_EL3_A (1 << 8) // SError interrupt mask #define SPSR_EL3_I (1 << 7) // IRQ interrupt mask #define SPSR_EL3_F (1 << 6) // FIQ interrupt mask #define SPSR_EL3_MODE_EL3H 13 // AArch64 Exception level and selected Stack Pointer, 13 is EL.3h. #define SPSR_EL3_MODE_EL1H 5 // AArch64 Exception level and selected Stack Pointer, 5 is EL.1h. #define SPSR_EL3_VAL (SPSR_EL3_D | SPSR_EL3_A | SPSR_EL3_I | SPSR_EL3_F | SPSR_EL3_MODE_EL1H) #define TCR_TG1_4K (2 << 30) #define TCR_T1SZ ((64 - 48) << 16) #define TCR_TG0_4K (0 << 14) #define TCR_T0SZ (64 - 48) #define TCR_EL1_VAL (TCR_TG1_4K | TCR_T1SZ | TCR_TG0_4K | TCR_T0SZ) /* architectural feature access control register */ #define CPACR_EL1_FPEN (1 << 21) | (1 << 20) // don't trap SIMD/FP registers #define CPACR_EL1_ZEN (1 << 17) | (1 << 16) // don't trap SVE instructions #define CPACR_EL1_VAL (CPACR_EL1_FPEN | CPACR_EL1_ZEN) /* exception syndrome register EL1 (ESR_EL1) */ #define ESR_ELx_EC_SHIFT 26 #define ESR_ELx_EC_SVC64 0x15 #define ESR_ELx_EC_DA_LOW 0x24 ================================================ FILE: rpi_bm/part16/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part16/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part16/include/video.h ================================================ #pragma once #include "common.h" void video_set_resolution(u32 xres, u32 yres, u32 bpp); void video_draw_char(char c, u32 pox_x, u32 pos_y); void video_draw_string(char *s, u32 pos_x, u32 pos_y); void video_draw_pixel(u32 x, u32 y, u32 color); void video_clear(); void video_dma(); //comes from fontData.c u32 font_get_height(); u32 font_get_width(); bool font_get_pixel(char ch, u32 x, u32 y); ================================================ FILE: rpi_bm/part16/square_margin ================================================ ================================================ FILE: rpi_bm/part16/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" #include "mmu.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 #if INIT_MMU == 1 ldr x0, =CPACR_EL1_VAL msr CPACR_EL1, x0 ldr x0, =TCR_EL1_VAL msr TCR_EL1, x0 ldr x0, =MAIR_VALUE msr MAIR_EL1, x0 #endif adr x0, el1_entry msr elr_el3, x0 eret el1_entry: mov sp, #LOW_MEMORY adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero #if INIT_MMU == 1 bl init_mmu adrp x0, id_pgd msr ttbr0_el1, x0 mrs x0, sctlr_el1 mov x1, #SCTLR_MMU_ENABLED orr x0, x0, x1 msr sctlr_el1, x0 #endif bl kernel_main b proc_hang proc_hang: wfe b proc_hang .globl id_pgd_addr id_pgd_addr: adrp x0, id_pgd ret ================================================ FILE: rpi_bm/part16/src/dma.c ================================================ #include #include #include #include #include dma_channel channels[15]; static u16 channel_map = 0x1F35; static u16 allocate_channel(u32 channel) { if (!(channel & ~0x0F)) { if (channel_map & (1 << channel)) { channel_map &= ~(1 << channel); return channel; } return -1; } u16 i = channel == CT_NORMAL ? 6 : 12; for (; i >= 0; i--) { if (channel_map & (1 << i)) { channel_map &= ~(1 << i); return i; } } return CT_NONE; } dma_channel *dma_open_channel(u32 channel) { u32 _channel = allocate_channel(channel); if (_channel == CT_NONE) { printf("INVALID CHANNEL! %d\n", channel); return 0; } dma_channel *dma = (dma_channel *)&channels[_channel]; dma->channel = _channel; //LOW_MEMORY = bottom of RAM... Hack for now since no allocate function dma->block = (dma_control_block *)((LOW_MEMORY + 31) & ~31); dma->block->res[0] = 0; dma->block->res[1] = 0; REGS_DMA_ENABLE |= (1 << dma->channel); timer_sleep(3); REGS_DMA(dma->channel)->control |= CS_RESET; while(REGS_DMA(dma->channel)->control & CS_RESET) ; return dma; } void dma_close_channel(dma_channel *channel) { channel_map |= (1 << channel->channel); } void dma_setup_mem_copy(dma_channel *channel, void *dest, void *src, u32 length, u32 burst_length) { channel->block->transfer_info = (burst_length << TI_BURST_LENGTH_SHIFT) | TI_SRC_WIDTH | TI_SRC_INC | TI_DEST_WIDTH | TI_DEST_INC; channel->block->src_addr = (u32)src; channel->block->dest_addr = (u32)dest; channel->block->transfer_length = length; channel->block->mode_2d_stride = 0; channel->block->next_block_addr = 0; } void dma_start(dma_channel *channel) { REGS_DMA(channel->channel)->control_block_addr = BUS_ADDRESS((u32)channel->block); REGS_DMA(channel->channel)->control = CS_WAIT_FOR_OUTSTANDING_WRITES | (DEFAULT_PANIC_PRIORITY << CS_PANIC_PRIORITY_SHIFT) | (DEFAULT_PRIORITY << CS_PRIORITY_SHIFT) | CS_ACTIVE; } bool dma_wait(dma_channel *channel) { while(REGS_DMA(channel->channel)->control & CS_ACTIVE) ; channel->status = REGS_DMA(channel->channel)->control & CS_ERROR ? false : true; return channel->status; } ================================================ FILE: rpi_bm/part16/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part16/src/fontData.c ================================================ // lat1-16 console font (ISO-8859-1) // // Taken from the Linux "kbd - Keyboard and Font Utilities" package // by Andries Brouwer // Alexey Gladkov // Portions by Paul Gortmaker // Licensed under GPLv2+ // #include "common.h" static const unsigned width = 8; static const unsigned height = 16; static const unsigned extraheight = 3; static const unsigned char font_data[224][16] = { {0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0x7C, 0x16, 0x16, 0xD6, 0x7C, 0x10, 0x10, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6, 0xE6, 0xE6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE, 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x64, 0x38, 0x0C, 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00}, {0x00, 0x30, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0xD0, 0xD6, 0x7C, 0x10, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x60, 0x60, 0xF0, 0x60, 0x60, 0x66, 0xF6, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC6, 0x7C, 0x6C, 0x6C, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0x99, 0xA5, 0xA1, 0xA5, 0x99, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5, 0xA5, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x30, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF6, 0xC0, 0xC0, 0xC0, 0x00}, {0x00, 0x00, 0x7F, 0xD6, 0xD6, 0x76, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x6C, 0x38, 0x00}, {0x30, 0x70, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x6E, 0xDB, 0x06, 0x0C, 0x1F, 0x00, 0x00, 0x00}, {0x70, 0xD8, 0x30, 0xD8, 0x76, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, 0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3E, 0x78, 0xD8, 0xD8, 0xFC, 0xD8, 0xD8, 0xD8, 0xD8, 0xDE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x0C, 0x66, 0x3C, 0x00}, {0x60, 0x30, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x08, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x18, 0x3C, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0xF6, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC6, 0xCE, 0xCE, 0xDE, 0xF6, 0xE6, 0xE6, 0xC6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xCC, 0xC6, 0xC6, 0xC6, 0xD6, 0xDC, 0x80, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0x1B, 0x7F, 0xD8, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x18, 0x6C, 0x38, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x78, 0x30, 0x78, 0x0C, 0x7E, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xCE, 0xDE, 0xFE, 0xF6, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00} }; #define FIRSTCHAR 0x21 #define LASTCHAR 0xFF #define CHARCOUNT (LASTCHAR - FIRSTCHAR + 1) u32 font_get_height() { return height + extraheight; } u32 font_get_width() { return width; } bool font_get_pixel(char ch, u32 x, u32 y) { if (ch < FIRSTCHAR || ch > LASTCHAR) { return false; } u32 index = ch - FIRSTCHAR; if (y >= height) { return false; } return font_data[index][y] & (0x80 >> x) ? true : false; } ================================================ FILE: rpi_bm/part16/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part16/src/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part16/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part16/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part16/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" #include "spi.h" #include "led_display.h" #include "mailbox.h" #include "video.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); struct align_check1 { u8 a; u8 b; u8 c; //u8 padding; u32 d; }; struct align_check2 { u8 a; u8 b; u8 c; u32 d; } PACKED; u8 buffer[] = {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70}; void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif #if INIT_MMU == 1 printf("Initialized MMU\n"); #endif printf("ALIGN CHECK\n"); struct align_check1 ac1; memcpy(&ac1, buffer, 7); printf("UNPACKED: A: %X, B: %X, C: %X, D: %X\n", ac1.a, ac1.b, ac1.c, ac1.d); struct align_check2 ac2; memcpy(&ac2, buffer, 7); printf("PACKED: A: %X, B: %X, C: %X, D: %X\n", ac2.a, ac2.b, ac2.c, ac2.d); void *p1 = get_free_pages(10); void *p2 = get_free_pages(4); void *p3 = allocate_memory(20 * 4096 + 1); free_memory(p1); free_memory(p2); free_memory(p3); timer_sleep(5000); printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (u8 i=0x20; i<0x30; i++) { if (i2c_send(i, &i, 1) == I2CS_SUCCESS) { //we know there is an i2c device here now. printf("Found device at address 0x%X\n", i); } } printf("Initializing SPI...\n"); spi_init(); printf("MAILBOX:\n"); printf("CORE CLOCK: %d\n", mailbox_clock_rate(CT_CORE)); printf("EMMC CLOCK: %d\n", mailbox_clock_rate(CT_EMMC)); printf("UART CLOCK: %d\n", mailbox_clock_rate(CT_UART)); printf("ARM CLOCK: %d\n", mailbox_clock_rate(CT_ARM)); printf("I2C POWER STATE:\n"); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(2000); for (int i=0; i<3; i++) { u32 on = 1; mailbox_generic_command(RPI_FIRMWARE_SET_DOMAIN_STATE, i, &on); printf("SET POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(1000); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } u32 max_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_MAX_TEMPERATURE, 0, &max_temp); //Do video... video_init(); printf("NO DMA...\n"); video_set_dma(false); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 32); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 32); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 32); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 8); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 8); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 8); printf("YES DMA...\n"); video_set_dma(true); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 32); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 32); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 32); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 8); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 8); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 8); while(1) { u32 cur_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_TEMPERATURE, 0, &cur_temp); printf("Cur temp: %dC MAX: %dC\n", cur_temp / 1000, max_temp / 1000); timer_sleep(1000); } } ================================================ FILE: rpi_bm/part16/src/lcd.c ================================================ #include "lcd.h" #include "i2c.h" #include "timer.h" #include "printf.h" /* P0 -> RS P1 -> RW P2 -> E P3 -> BT (Backlight) P4 -> D4 P5 -> D5 P6 -> D6 P7 -> D7 */ typedef enum Flags { FLAG_RS = 1, FLAG_RW = 2, FLAG_EN = 4 }; // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 #define LCD_BACKLIGHT 8 #define LCD_NOBACKLIGHT 0 static u8 _backlight = LCD_BACKLIGHT; static u8 _lcd_address = 0; static void write_i2c(u8 data) { u8 value = data | _backlight; i2c_send(_lcd_address, &value, 1); } //page 33 static void pulse(u8 data) { write_i2c(data | FLAG_EN); timer_sleep(5); write_i2c(data & ~FLAG_EN); timer_sleep(1); } static void write_4bits(u8 data) { write_i2c(data); pulse(data); } void lcd_send(u8 data, u8 mode) { write_4bits((data & 0xF0) | mode); write_4bits(((data << 4) & 0xF0) | mode); } void lcd_command(u8 command) { lcd_send(command, 0); } void lcd_init(u8 address) { _lcd_address = address; //page 46 write_4bits(3 << 4); timer_sleep(5); write_4bits(3 << 4); timer_sleep(1); write_4bits(3 << 4); write_4bits(2 << 4); lcd_command(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE); lcd_command(LCD_DISPLAYCONTROL | LCD_DISPLAYON); lcd_command(LCD_CLEARDISPLAY); timer_sleep(2); lcd_command(LCD_ENTRYMODESET | LCD_ENTRYLEFT); lcd_command(LCD_RETURNHOME); timer_sleep(2); } void lcd_backlight(bool on) { if (on) { _backlight = LCD_BACKLIGHT; } else { _backlight = LCD_NOBACKLIGHT; } write_i2c(0); } //page 42 : 6 void lcd_print(char *s) { while(*s) { lcd_send(*s, FLAG_RS); s++; } } ================================================ FILE: rpi_bm/part16/src/led_display.c ================================================ #include "led_display.h" #include "spi.h" const static u8 DIGIT_TABLE [] = { 0b01111110,0b00110000,0b01101101,0b01111001,0b00110011,0b01011011,0b01011111,0b01110000, 0b01111111,0b01111011 }; void led_display_init() { led_display_send_command(LD_SCANLIMIT, 7); led_display_send_command(LD_DECODE_MODE, 0); led_display_send_command(LD_SHUTDOWN, 1); led_display_send_command(LD_INTENSITY, 0); led_display_send_command(LD_DISPLAYTEST, 0); led_display_intensity(5); } void led_display_send_command(u8 opcode, u8 data) { u8 cmd[2]; cmd[0] = opcode; cmd[1] = data; spi_send(0, cmd, 2); } void led_display_clear() { for (int i=LD_DIGIT0; i<=LD_DIGIT7; i++) { led_display_send_command(i, 0); } } void led_display_intensity(u8 value) { led_display_send_command(LD_INTENSITY, value); } void led_display_set_digit(u8 digit, u8 value, bool dot) { u8 digit_value = DIGIT_TABLE[value]; if (dot) { digit_value |= 0x80; } led_display_send_command(LD_DIGIT0 + digit, digit_value); } ================================================ FILE: rpi_bm/part16/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; . = ALIGN(0x00001000); id_pgd = .; .data.id_pgd : { . += (6 * (1 << 12)); } } ================================================ FILE: rpi_bm/part16/src/mailbox.c ================================================ #include #include #include "printf.h" #include typedef struct { reg32 read; reg32 res[5]; reg32 status; reg32 config; reg32 write; } mailbox_regs; mailbox_regs *MBX() { return (mailbox_regs *)(PBASE + 0xB880); } typedef struct { u32 size; u32 code; u8 tags[0]; } property_buffer; static u32 property_data[8192] __attribute__((aligned(16))); #define MAIL_EMPTY 0x40000000 #define MAIL_FULL 0x80000000 #define MAIL_POWER 0x0 // Mailbox Channel 0: Power Management Interface #define MAIL_FB 0x1 // Mailbox Channel 1: Frame Buffer #define MAIL_VUART 0x2 // Mailbox Channel 2: Virtual UART #define MAIL_VCHIQ 0x3 // Mailbox Channel 3: VCHIQ Interface #define MAIL_LEDS 0x4 // Mailbox Channel 4: LEDs Interface #define MAIL_BUTTONS 0x5 // Mailbox Channel 5: Buttons Interface #define MAIL_TOUCH 0x6 // Mailbox Channel 6: Touchscreen Interface #define MAIL_COUNT 0x7 // Mailbox Channel 7: Counter #define MAIL_TAGS 0x8 // Mailbox Channel 8: Tags (ARM to VC) static void mailbox_write(u8 channel, u32 data) { while(MBX()->status & MAIL_FULL) ; MBX()->write = (data & 0xFFFFFFF0 | (channel & 0xF)); } static u32 mailbox_read(u8 channel) { while(true) { while(MBX()->status & MAIL_EMPTY) ; u32 data = MBX()->read; u8 read_channel = (u8)(data & 0xF); if (read_channel == channel) { return data & 0xFFFFFFF0; } } } bool mailbox_process(mailbox_tag *tag, u32 tag_size) { int buffer_size = tag_size + 12; memcpy(&property_data[2], tag, tag_size); property_buffer *buff = (property_buffer *)property_data; buff->size = buffer_size; buff->code = RPI_FIRMWARE_STATUS_REQUEST; property_data[(tag_size + 12) / 4 - 1] = RPI_FIRMWARE_PROPERTY_END; mailbox_write(MAIL_TAGS, (u32)(void *)property_data); int result = mailbox_read(MAIL_TAGS); memcpy(tag, property_data + 2, tag_size); return true; } bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value) { mailbox_generic mbx; mbx.tag.id = tag_id; mbx.tag.value_length = 0; mbx.tag.buffer_size = sizeof(mailbox_generic) - sizeof(mailbox_tag); mbx.id = id; mbx.value = *value; if (!mailbox_process((mailbox_tag *)&mbx, sizeof(mbx))) { printf("FAILED TO PROCESS: %X\n", tag_id); return false; } *value = mbx.value; return true; } u32 mailbox_clock_rate(clock_type ct) { mailbox_clock c; c.tag.id = RPI_FIRMWARE_GET_CLOCK_RATE; c.tag.value_length = 0; c.tag.buffer_size = sizeof(c) - sizeof(c.tag); c.id = ct; mailbox_process((mailbox_tag *)&c, sizeof(c)); return c.rate; } bool mailbox_power_check(u32 type) { mailbox_power p; p.tag.id = RPI_FIRMWARE_GET_DOMAIN_STATE; p.tag.value_length = 0; p.tag.buffer_size = sizeof(p) - sizeof(p.tag); p.id = type; p.state = ~0; mailbox_process((mailbox_tag *)&p, sizeof(p)); return p.state && p.state != ~0; } ================================================ FILE: rpi_bm/part16/src/mem.c ================================================ #include #include #include #include #include static u16 mem_map [ PAGING_PAGES ] = {0,}; void *allocate_memory(int bytes) { int pages = bytes / PAGE_SIZE; if (bytes % PAGE_SIZE) { pages++; } return get_free_pages(pages); } void free_memory(void *base) { u64 page_num = (((u64)base) - LOW_MEMORY) / PAGE_SIZE; int pages = mem_map[page_num]; printf("free_memory at address %X page num: %d pages: %d\n", base, page_num, pages); for (int i=0; i> shift; table_index &= (ENTRIES_PER_TABLE - 1); u64 descriptor = next_tbl | flags; *((u64 *)(tbl + (table_index << 3))) = descriptor; } void create_block_map(u64 pmd, u64 vstart, u64 vend, u64 pa) { vstart >>= SECTION_SHIFT; vstart &= (ENTRIES_PER_TABLE -1); vend >>= SECTION_SHIFT; vend--; vend &= (ENTRIES_PER_TABLE - 1); pa >>= SECTION_SHIFT; pa <<= SECTION_SHIFT; do { u64 _pa = pa; if (pa >= DEVICE_START) { _pa |= TD_DEVICE_BLOCK_FLAGS; } else { _pa |= TD_KERNEL_BLOCK_FLAGS; } *((u64 *)(pmd + (vstart << 3))) = _pa; pa += SECTION_SIZE; vstart++; } while(vstart <= vend); } u64 id_pgd_addr(); void init_mmu() { u64 id_pgd = id_pgd_addr(); memzero(id_pgd, ID_MAP_TABLE_SIZE); u64 map_base = 0; u64 tbl = id_pgd; u64 next_tbl = tbl + PAGE_SIZE; create_table_entry(tbl, next_tbl, map_base, PGD_SHIFT, TD_KERNEL_TABLE_FLAGS); tbl += PAGE_SIZE; next_tbl += PAGE_SIZE; u64 block_tbl = tbl; for (u64 i=0; i<4; i++) { create_table_entry(tbl, next_tbl, map_base, PUD_SHIFT, TD_KERNEL_TABLE_FLAGS); next_tbl += PAGE_SIZE; map_base += PUD_ENTRY_MAP_SIZE; block_tbl += PAGE_SIZE; u64 offset = BLOCK_SIZE * i; create_block_map(block_tbl, offset, offset + BLOCK_SIZE, offset); } } ================================================ FILE: rpi_bm/part16/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part16/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part16/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part16/src/spi.c ================================================ #include "spi.h" #include "peripherals/spi.h" #include "gpio.h" #include "printf.h" void spi_init() { gpio_pin_set_func(7, GFAlt0); //CS1 gpio_pin_set_func(8, GFAlt0); //CS0 -> CS (red) gpio_pin_set_func(9, GFAlt0); //MISO gpio_pin_set_func(10, GFAlt0);//MOSI -> DIN (brown) gpio_pin_set_func(11, GFAlt0);//SCLK -> CLK (orange) gpio_pin_enable(7); gpio_pin_enable(8); gpio_pin_enable(9); gpio_pin_enable(10); gpio_pin_enable(11); } void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size) { REGS_SPI0->data_length = size; REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_CS) | (chip_select << CS_CS__SHIFT) | CS_CLEAR_RX | CS_CLEAR_TX | CS_TA; u32 read_count = 0; u32 write_count = 0; while(read_count < size || write_count < size) { while(write_count < size && REGS_SPI0->cs & CS_TXD) { if (sbuffer) { REGS_SPI0->fifo = *sbuffer++; } else { REGS_SPI0->fifo = 0; } write_count++; } while(read_count < size && REGS_SPI0->cs & CS_RXD) { u32 data = REGS_SPI0->fifo; if (rbuffer) { *rbuffer++ = data; } read_count++; } } while(!(REGS_SPI0->cs & CS_DONE)) { while(REGS_SPI0->cs & CS_RXD) { u32 r = REGS_SPI0->fifo; printf("Left Over: %d\n", r); } } REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_TA); } void spi_send(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, data, 0, size); } void spi_recv(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, 0, data, size); } ================================================ FILE: rpi_bm/part16/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part16/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part16/src/video.c ================================================ #include "mailbox.h" #include "printf.h" #include "timer.h" #include "video.h" #include "dma.h" #include "mm.h" typedef struct { mailbox_tag tag; u32 xres; u32 yres; } mailbox_fb_size; typedef struct { mailbox_tag tag; u32 bpp; } mailbox_fb_depth; typedef struct { mailbox_tag tag; u32 pitch; } mailbox_fb_pitch; typedef struct { mailbox_tag tag; u32 base; u32 screen_size; } mailbox_fb_buffer; typedef struct { mailbox_fb_size res; mailbox_fb_size vres; //virtual resolution.. mailbox_fb_depth depth; mailbox_fb_buffer buff; mailbox_fb_pitch pitch; } mailbox_fb_request; static mailbox_fb_request fb_req; static dma_channel *dma; static u8 *vid_buffer; static u32 *bg32_buffer; static u32 *bg8_buffer; #define TEXT_COLOR 0xFFFFFFFF #define BACK_COLOR 0xFF0055BB #define MB (1024 * 1024) //hack for not having an allocate function yet... #define BG32_MEM_LOCATION (LOW_MEMORY + (10 * MB)) #define BG8_MEM_LOCATION (BG32_MEM_LOCATION + (10 * MB)) #define VB_MEM_LOCATION (BG8_MEM_LOCATION + (4 * MB)) void video_init() { dma = dma_open_channel(CT_NORMAL); vid_buffer = (u8 *)VB_MEM_LOCATION; printf("DMA CHANNEL: %d\n", dma->channel); printf("VID BUFF: %X\n", vid_buffer); bg32_buffer = (u32 *)BG32_MEM_LOCATION; bg8_buffer = (u32 *)BG8_MEM_LOCATION; for (int i=0; i<(10 * MB) / 4; i++) { bg32_buffer[i] = BACK_COLOR; } for (int i=0; i<(4 * MB) / 4; i++) { bg8_buffer[i] = 0x01010101; } } static bool use_dma = false; #define BUS_ADDR(x) (((u64)x | 0x40000000) & ~0xC0000000) #define FRAMEBUFFER ((volatile u8 *)BUS_ADDR(fb_req.buff.base)) #define DMABUFFER ((volatile u8 *)vid_buffer) #define DRAWBUFFER (use_dma ? DMABUFFER : FRAMEBUFFER) void video_set_dma(bool b) { use_dma = b; } void do_dma(void *dest, void *src, u32 total) { u32 ms_start = timer_get_ticks() / 1000; u32 start = 0; while(total > 0) { int num_bytes = total; if (num_bytes > 0xFFFFFF) { num_bytes = 0xFFFFFF; } dma_setup_mem_copy(dma, dest + start, src + start, num_bytes, 2); dma_start(dma); dma_wait(dma); start += num_bytes; total -= num_bytes; } u32 ms_end = timer_get_ticks() / 1000; //ms ticks when done... printf("DMA took %d ms\n", (ms_end - ms_start)); } void video_dma() { do_dma(FRAMEBUFFER, DMABUFFER, fb_req.buff.screen_size); } typedef struct { mailbox_tag tag; u32 offset; u32 num_entries; u32 entries[8]; } mailbox_set_palette; void video_set_resolution(u32 xres, u32 yres, u32 bpp) { fb_req.res.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT; fb_req.res.tag.buffer_size = 8; fb_req.res.tag.value_length = 8; fb_req.res.xres = xres; fb_req.res.yres = yres; fb_req.vres.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT; fb_req.vres.tag.buffer_size = 8; fb_req.vres.tag.value_length = 8; fb_req.vres.xres = xres; fb_req.vres.yres = yres; fb_req.depth.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH; fb_req.depth.tag.buffer_size = 4; fb_req.depth.tag.value_length = 4; fb_req.depth.bpp = bpp; fb_req.buff.tag.id = RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE; fb_req.buff.tag.buffer_size = 8; fb_req.buff.tag.value_length = 4; fb_req.buff.base = 16; fb_req.buff.screen_size = 0; fb_req.pitch.tag.id = RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH; fb_req.pitch.tag.buffer_size = 4; fb_req.pitch.tag.value_length = 4; fb_req.pitch.pitch = 0; mailbox_set_palette palette; palette.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE; palette.tag.buffer_size = 40; palette.tag.value_length = 0; palette.offset = 0; palette.num_entries = 8; palette.entries[0] = 0; palette.entries[1] = 0xFFBB5500; palette.entries[2] = 0xFFFFFFFF; palette.entries[3] = 0xFFFF0000; palette.entries[4] = 0xFF00FF00; palette.entries[5] = 0xFF0000FF; palette.entries[6] = 0x55555555; palette.entries[7] = 0xCCCCCCCC; //sets the actual resolution mailbox_process((mailbox_tag *)&fb_req, sizeof(fb_req)); printf("Allocated Buffer: %X - %d - %d\n", fb_req.buff.base, fb_req.buff.screen_size, fb_req.depth.bpp); if (bpp == 8) { mailbox_process((mailbox_tag *)&palette, sizeof(palette)); } //draw some text showing what resolution is... char res[64]; for (int i=0; i<4; i++) { u64 ms_start = timer_get_ticks() / 1000; //get ticks in ms before drawing on screen... if (fb_req.depth.bpp == 32) { if (!use_dma) { u32 *buff = (u32 *)FRAMEBUFFER; for (int i=0; i> 3)) + (y * fb_req.pitch.pitch); if (fb_req.depth.bpp == 32) { u32 *buff = (u32 *)DRAWBUFFER; buff[pixel_offset / 4] = color; } else if (fb_req.depth.bpp == 16) { u16 *buff = (u16 *)DRAWBUFFER; buff[pixel_offset / 2] = color & 0xFFFF; } else { DRAWBUFFER[pixel_offset++] = (color & 0xFF); } } void video_draw_char(char c, u32 pos_x, u32 pos_y) { u32 text_color = TEXT_COLOR; u32 back_color = BACK_COLOR; if (fb_req.depth.bpp == 8) { text_color = 2; back_color = 1; } for (int y=0; y #define ADDRESS 21 const char *answer = "HELLO_I2C"; void setup() { Wire.begin(ADDRESS); Wire.onRequest(request_data); Wire.onReceive(receive_data); Serial.begin(9600); Serial.println("I2C Slave Initialized."); } void receive_data() { while (Wire.available() > 0) { char buffer[32]; byte b = Wire.read(); sprintf(buffer, "Received: %2.2X - %c", b, b); Serial.println(buffer); } } void request_data() { // Send response back to Master Wire.write(answer,strlen(answer)); // Print to Serial Monitor Serial.print("Sent Data: "); Serial.println(answer); } void loop() { delay(50); } ================================================ FILE: rpi_bm/part17/include/common.h ================================================ #pragma once #include #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; #define PACKED __attribute((__packed__)) ================================================ FILE: rpi_bm/part17/include/dma.h ================================================ #pragma once #include typedef struct { u32 channel; dma_control_block *block; bool status; } dma_channel; typedef enum { CT_NONE = -1, CT_NORMAL = 0x81 } dma_channel_type; dma_channel *dma_open_channel(u32 channel); void dma_close_channel(dma_channel *channel); void dma_setup_mem_copy(dma_channel *channel, void *dest, void *src, u32 length, u32 burst_length); void dma_start(dma_channel *channel); bool dma_wait(dma_channel *channel); ================================================ FILE: rpi_bm/part17/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part17/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part17/include/i2c.h ================================================ #pragma once #include "common.h" typedef enum _i2c_status { I2CS_SUCCESS, I2CS_ACK_ERROR, I2CS_DATA_LOSS, I2CS_CLOCK_TIMEOUT } i2c_status; void i2c_init(); i2c_status i2c_recv(u8 address, u8 *buffer, u32 size); i2c_status i2c_send(u8 address, u8 *buffer, u32 size); ================================================ FILE: rpi_bm/part17/include/io.h ================================================ #pragma once #include typedef struct _io_device { char *name; void *data; int (*read)(struct _io_device *, void *, u32); int (*write)(struct _io_device *, void *, u32); void (*seek)(struct _io_device *, u64); bool (*open)(struct _io_device *, void *); bool (*close)(struct _io_device *, void *); } io_device; bool io_device_register(io_device *dev); io_device *io_device_find(char *name); ================================================ FILE: rpi_bm/part17/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part17/include/lcd.h ================================================ #pragma once #include "common.h" //HD44780 Datasheet //https://image.dfrobot.com/image/data/DFR0154/LCD2004%20hd44780%20Datasheet.pdf void lcd_init(u8 address); void lcd_backlight(bool on); void lcd_print(char *s); void lcd_send(u8 data, u8 mode); void lcd_command(u8 command); ================================================ FILE: rpi_bm/part17/include/led_display.h ================================================ #pragma once #include "common.h" void led_display_init(); void led_display_send_command(u8 opcode, u8 data); void led_display_clear(); void led_display_intensity(u8 value); void led_display_set_digit(u8 digit, u8 value, bool dot); void led_display_set_value(int value); typedef enum { LD_NOOP = 0, LD_DIGIT0, LD_DIGIT1, LD_DIGIT2, LD_DIGIT3, LD_DIGIT4, LD_DIGIT5, LD_DIGIT6, LD_DIGIT7, LD_DECODE_MODE, LD_INTENSITY, LD_SCANLIMIT, LD_SHUTDOWN, LD_DISPLAYTEST = 15 } led_display_opcodes; ================================================ FILE: rpi_bm/part17/include/mailbox.h ================================================ #pragma once #include "common.h" typedef struct { u32 id; u32 buffer_size; u32 value_length; } mailbox_tag; typedef struct { u32 size; void *tag; } mailbox_command; typedef struct { mailbox_tag tag; u32 id; u32 value; } mailbox_generic; typedef struct { mailbox_tag tag; u32 id; u32 state; } mailbox_power; typedef struct { mailbox_tag tag; u32 id; u32 rate; } mailbox_clock; typedef enum { CT_EMMC = 1, CT_UART = 2, CT_ARM = 3, CT_CORE = 4 } clock_type; #define RPI_POWER_DOMAIN_I2C0 0 #define RPI_POWER_DOMAIN_I2C1 1 #define RPI_POWER_DOMAIN_I2C2 2 #define RPI_POWER_DOMAIN_VIDEO_SCALER 3 #define RPI_POWER_DOMAIN_VPU1 4 #define RPI_POWER_DOMAIN_HDMI 5 #define RPI_POWER_DOMAIN_USB 6 #define RPI_POWER_DOMAIN_VEC 7 #define RPI_POWER_DOMAIN_JPEG 8 #define RPI_POWER_DOMAIN_H264 9 #define RPI_POWER_DOMAIN_V3D 10 #define RPI_POWER_DOMAIN_ISP 11 #define RPI_POWER_DOMAIN_UNICAM0 12 #define RPI_POWER_DOMAIN_UNICAM1 13 #define RPI_POWER_DOMAIN_CCP2RX 14 #define RPI_POWER_DOMAIN_CSI2 15 #define RPI_POWER_DOMAIN_CPI 16 #define RPI_POWER_DOMAIN_DSI0 17 #define RPI_POWER_DOMAIN_DSI1 18 #define RPI_POWER_DOMAIN_TRANSPOSER 19 #define RPI_POWER_DOMAIN_CCP2TX 20 #define RPI_POWER_DOMAIN_CDP 21 #define RPI_POWER_DOMAIN_ARM 22 #define RPI_POWER_DOMAIN_COUNT 23 enum rpi_firmware_property_status { RPI_FIRMWARE_STATUS_REQUEST = 0, RPI_FIRMWARE_STATUS_SUCCESS = 0x80000000, RPI_FIRMWARE_STATUS_ERROR = 0x80000001, }; enum rpi_firmware_property_tag { RPI_FIRMWARE_PROPERTY_END = 0, RPI_FIRMWARE_GET_FIRMWARE_REVISION = 0x00000001, RPI_FIRMWARE_SET_CURSOR_INFO = 0x00008010, RPI_FIRMWARE_SET_CURSOR_STATE = 0x00008011, RPI_FIRMWARE_GET_BOARD_MODEL = 0x00010001, RPI_FIRMWARE_GET_BOARD_REVISION = 0x00010002, RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 0x00010003, RPI_FIRMWARE_GET_BOARD_SERIAL = 0x00010004, RPI_FIRMWARE_GET_ARM_MEMORY = 0x00010005, RPI_FIRMWARE_GET_VC_MEMORY = 0x00010006, RPI_FIRMWARE_GET_CLOCKS = 0x00010007, RPI_FIRMWARE_GET_POWER_STATE = 0x00020001, RPI_FIRMWARE_GET_TIMING = 0x00020002, RPI_FIRMWARE_SET_POWER_STATE = 0x00028001, RPI_FIRMWARE_GET_CLOCK_STATE = 0x00030001, RPI_FIRMWARE_GET_CLOCK_RATE = 0x00030002, RPI_FIRMWARE_GET_VOLTAGE = 0x00030003, RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 0x00030004, RPI_FIRMWARE_GET_MAX_VOLTAGE = 0x00030005, RPI_FIRMWARE_GET_TEMPERATURE = 0x00030006, RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 0x00030007, RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008, RPI_FIRMWARE_GET_TURBO = 0x00030009, RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a, RPI_FIRMWARE_GET_STC = 0x0003000b, RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c, RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d, RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e, RPI_FIRMWARE_RELEASE_MEMORY = 0x0003000f, RPI_FIRMWARE_EXECUTE_CODE = 0x00030010, RPI_FIRMWARE_EXECUTE_QPU = 0x00030011, RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012, RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014, RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020, RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021, RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030, RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001, RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002, RPI_FIRMWARE_SET_VOLTAGE = 0x00038003, RPI_FIRMWARE_SET_TURBO = 0x00038009, RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021, RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030, RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041, RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041, RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042, RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043, RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043, RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045, RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, /* Dispmanx TAGS */ RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, RPI_FIRMWARE_FRAMEBUFFER_BLANK = 0x00040002, RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 0x00040005, RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 0x00040006, RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 0x00040007, RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 0x00040008, RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009, RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a, RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b, RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f, RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010, RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001, RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005, RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 0x00044006, RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 0x00044007, RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009, RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a, RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b, RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e, RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005, RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 0x00048006, RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 0x00048007, RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009, RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a, RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b, RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f, RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020, RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e, RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f, RPI_FIRMWARE_VCHIQ_INIT = 0x00048010, RPI_FIRMWARE_GET_COMMAND_LINE = 0x00050001, RPI_FIRMWARE_GET_DMA_CHANNELS = 0x00060001, }; u32 mailbox_clock_rate(clock_type ct); bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value); bool mailbox_power_check(u32 type); bool mailbox_process(mailbox_tag *tag, u32 tag_size); ================================================ FILE: rpi_bm/part17/include/mem.h ================================================ #pragma once #include "common.h" void *memcpy(void *dest, const void *src, u32 n); #define GPU_CACHED_BASE 0x40000000 #define GPU_UNCACHED_BASE 0xC0000000 #define GPU_MEM_BASE GPU_UNCACHED_BASE #define BUS_ADDRESS(addr) (((addr) & ~0xC0000000) | GPU_MEM_BASE) void *get_free_pages(int num_pages); void *allocate_memory(int bytes); void free_memory(void *base); ================================================ FILE: rpi_bm/part17/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part17/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #define HIGH_MEMORY 0x40000000 #define PAGING_MEMORY (HIGH_MEMORY - LOW_MEMORY) #define PAGING_PAGES (PAGING_MEMORY/PAGE_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part17/include/mmu.h ================================================ #pragma once #define MM_TYPE_PAGE_TABLE 0x3 #define MM_TYPE_PAGE 0x3 #define MM_TYPE_BLOCK 0x1 #define MM_ACCESS (0x1 << 10) #define MM_ACCESS_PERMISSION (0x01 << 6) /* * Memory region attributes: * * n = AttrIndx[2:0] * n MAIR * DEVICE_nGnRnE 000 00000000 * NORMAL_NC 001 01000100 */ #define MT_DEVICE_nGnRnE 0x0 #define MT_NORMAL_NC 0x1 #define MT_DEVICE_nGnRnE_FLAGS 0x00 #define MT_NORMAL_NC_FLAGS 0x44 #define MAIR_VALUE (MT_DEVICE_nGnRnE_FLAGS << (8 * MT_DEVICE_nGnRnE)) | (MT_NORMAL_NC_FLAGS << (8 * MT_NORMAL_NC)) #define ATTRINDX_NORMAL 0 #define ATTRINDX_DEVICE 1 #define ATTRINDX_COHERENT 2 #define MAIR_VALUENEW (0xFF << ATTRINDX_NORMAL*8 \ | 0x04 << ATTRINDX_DEVICE*8 \ | 0x00 << ATTRINDX_COHERENT*8) #define MMU_FLAGS (MM_TYPE_BLOCK | (MT_NORMAL_NC << 2) | MM_ACCESS) #define MMU_DEVICE_FLAGS (MM_TYPE_BLOCK | (MT_DEVICE_nGnRnE << 2) | MM_ACCESS) #define MMU_PTE_FLAGS (MM_TYPE_PAGE | (MT_NORMAL_NC << 2) | MM_ACCESS | MM_ACCESS_PERMISSION) #define TCR_T0SZ (64 - 48) #define TCR_T1SZ ((64 - 48) << 16) #define TCR_TG0_4K (0 << 14) #define TCR_TG1_4K (2 << 30) #define TCR_VALUE (TCR_T0SZ | TCR_T1SZ | TCR_TG0_4K | TCR_TG1_4K) // System registers #define SCTLR_EL1_WXN (1 << 19) // SCTLR_EL1 #define SCTLR_EL1_I (1 << 12) #define SCTLR_EL1_C (1 << 2) #define SCTLR_EL1_A (1 << 1) #define SCTLR_EL1_M (1 << 0) ================================================ FILE: rpi_bm/part17/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part17/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #define DEVICE_START 0x3B400000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #define DEVICE_START 0xFC000000 #else #define PBASE 0 #define DEVICE_START 0 #error RPI_VERSION NOT DEFINED #endif #define CORE_CLOCK_SPEED 1500000000 ================================================ FILE: rpi_bm/part17/include/peripherals/dma.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" typedef struct { u32 transfer_info; u32 src_addr; u32 dest_addr; u32 transfer_length; u32 mode_2d_stride; u32 next_block_addr; u32 res[2]; } dma_control_block; typedef struct { u32 control; u32 control_block_addr; dma_control_block block; } dma_channel_regs; #define REGS_DMA(channel) ((dma_channel_regs *)(PBASE + 0x00007000 + (channel * 0x100))) #define REGS_DMA_INT_STATUS *((volatile u32 *)(PBASE + 0x00007FE0)) #define REGS_DMA_ENABLE *((volatile u32 *)(PBASE + 0x00007FF0)) //defines for differnet bits of the control and transfer info #define CS_RESET (1 << 31) #define CS_ABORT (1 << 30) #define CS_WAIT_FOR_OUTSTANDING_WRITES (1 << 28) #define CS_PANIC_PRIORITY_SHIFT 20 #define DEFAULT_PANIC_PRIORITY 15 #define CS_PRIORITY_SHIFT 16 #define DEFAULT_PRIORITY 1 #define CS_ERROR (1 << 8) #define CS_INT (1 << 2) #define CS_END (1 << 1) #define CS_ACTIVE (1 << 0) #define TI_PERMAP_SHIFT 16 #define TI_BURST_LENGTH_SHIFT 12 #define DEFAULT_BURST_LENGTH 0 #define TI_SRC_IGNORE (1 << 11) #define TI_SRC_DREQ (1 << 10) #define TI_SRC_WIDTH (1 << 9) #define TI_SRC_INC (1 << 8) #define TI_DEST_DREQ (1 << 6) #define TI_DEST_WIDTH (1 << 5) #define TI_DEST_INC (1 << 4) #define TI_WAIT_RESP (1 << 3) #define TI_TDMODE (1 << 1) #define TI_INTEN (1 << 0) ================================================ FILE: rpi_bm/part17/include/peripherals/emmc.h ================================================ #pragma once #include "peripherals/base.h" #include #include #define EMMC_DEBUG 0 #define BSWAP32(x) (((x << 24) & 0xff000000 ) | \ ((x << 8) & 0x00ff0000 ) | \ ((x >> 8) & 0x0000ff00 ) | \ ((x >> 24) & 0x000000ff )) typedef struct { u8 resp_a : 1; u8 block_count : 1; u8 auto_command : 2; u8 direction : 1; u8 multiblock : 1; u16 resp_b : 10; u8 response_type : 2; u8 res0 : 1; u8 crc_enable : 1; u8 idx_enable : 1; u8 is_data : 1; u8 type : 2; u8 index : 6; u8 res1 : 2; } emmc_cmd; #define RES_CMD {1, 1, 3, 1, 1, 0xF, 3, 1, 1, 1, 1, 3, 0xF, 3} typedef enum { RTNone, RT136, RT48, RT48Busy } cmd_resp_type; typedef enum { CTGoIdle = 0, CTSendCide = 2, CTSendRelativeAddr = 3, CTIOSetOpCond = 5, CTSelectCard = 7, CTSendIfCond = 8, CTSetBlockLen = 16, CTReadBlock = 17, CTReadMultiple = 18, CTWriteBlock = 24, CTWriteMultiple = 25, CTOcrCheck = 41, CTSendSCR = 51, CTApp = 55 } cmd_type; typedef struct { u32 scr[2]; u32 bus_widths; u32 version; } scr_register; typedef enum { SDECommandTimeout, SDECommandCrc, SDECommandEndBit, SDECommandIndex, SDEDataTimeout, SDEDataCrc, SDEDataEndBit, SDECurrentLimit, SDEAutoCmd12, SDEADma, SDETuning, SDERsvd } sd_error; typedef struct { bool last_success; u32 transfer_blocks; emmc_cmd last_command; reg32 last_command_value; u32 block_size; u32 last_response[4]; bool sdhc; u16 ocr; u32 rca; u64 offset; void *buffer; u32 base_clock; u32 last_error; u32 last_interrupt; scr_register scr; } emmc_device; typedef struct { reg32 arg2; reg32 block_size_count; reg32 arg1; reg32 cmd_xfer_mode; reg32 response[4]; reg32 data; reg32 status; reg32 control[2]; reg32 int_flags; reg32 int_mask; reg32 int_enable; reg32 control2; reg32 cap1; reg32 cap2; reg32 res0[2]; reg32 force_int; reg32 res1[7]; reg32 boot_timeout; reg32 debug_config; reg32 res2[2]; reg32 ext_fifo_config; reg32 ext_fifo_enable; reg32 tune_step; reg32 tune_SDR; reg32 tune_DDR; reg32 res3[23]; reg32 spi_int_support; reg32 res4[2]; reg32 slot_int_status; } emmc_regs; #define TO_REG(p) *((reg32 *)p) // SD Clock Frequencies (in Hz) #define SD_CLOCK_ID 400000 #define SD_CLOCK_NORMAL 25000000 #define SD_CLOCK_HIGH 50000000 #define SD_CLOCK_100 100000000 #define SD_CLOCK_208 208000000 #define SD_COMMAND_COMPLETE 1 #define SD_TRANSFER_COMPLETE (1 << 1) #define SD_BLOCK_GAP_EVENT (1 << 2) #define SD_DMA_INTERRUPT (1 << 3) #define SD_BUFFER_WRITE_READY (1 << 4) #define SD_BUFFER_READ_READY (1 << 5) #define SD_CARD_INSERTION (1 << 6) #define SD_CARD_REMOVAL (1 << 7) #define SD_CARD_INTERRUPT (1 << 8) #if RPI_VERSION == 3 #define EMMC_BASE (PBASE + 0x00300000) #else #define EMMC_BASE (PBASE + 0x00340000) #endif #define EMMC ((emmc_regs *)EMMC_BASE) bool emmc_init(); int emmc_read(u8 *buffer, u32 size); void emmc_seek(u64 offset); #define EMMC_CTRL1_RESET_DATA (1 << 26) #define EMMC_CTRL1_RESET_CMD (1 << 25) #define EMMC_CTRL1_RESET_HOST (1 << 24) #define EMMC_CTRL1_RESET_ALL (EMMC_CTRL1_RESET_DATA | EMMC_CTRL1_RESET_CMD | EMMC_CTRL1_RESET_HOST) #define EMMC_CTRL1_CLK_GENSEL (1 << 5) #define EMMC_CTRL1_CLK_ENABLE (1 << 2) #define EMMC_CTRL1_CLK_STABLE (1 << 1) #define EMMC_CTRL1_CLK_INT_EN (1 << 0) #define EMMC_CTRL0_ALT_BOOT_EN (1 << 22) #define EMMC_CTRL0_BOOT_EN (1 << 21) #define EMMC_CTRL0_SPI_MODE (1 << 20) #define EMMC_STATUS_DAT_INHIBIT (1 << 1) #define EMMC_STATUS_CMD_INHIBIT (1 << 0) ================================================ FILE: rpi_bm/part17/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part17/include/peripherals/i2c.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" struct I2CRegs { reg32 control; reg32 status; reg32 data_length; reg32 slave_address; reg32 fifo; reg32 div; reg32 delay; reg32 clock_stretch; }; #define REGS_I2C ((struct I2CRegs *)(PBASE + 0x00804000)) // Control register #define C_I2CEN (1 << 15) #define C_INTR (1 << 10) #define C_INTT (1 << 9) #define C_INTD (1 << 8) #define C_ST (1 << 7) #define C_CLEAR (1 << 5) #define C_READ (1 << 0) // Status register #define S_CLKT (1 << 9) #define S_ERR (1 << 8) #define S_RXF (1 << 7) #define S_TXE (1 << 6) #define S_RXD (1 << 5) #define S_TXD (1 << 4) #define S_RXR (1 << 3) #define S_TXW (1 << 2) #define S_DONE (1 << 1) #define S_TA (1 << 0) ================================================ FILE: rpi_bm/part17/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part17/include/peripherals/spi.h ================================================ #pragma once #include "common.h" struct Spi0Regs { reg32 cs; reg32 fifo; reg32 clock; reg32 data_length; reg32 ltoh; reg32 dc; }; #define REGS_SPI0 ((struct Spi0Regs *)(PBASE + 0x00204000)) // CS Register #define CS_LEN_LONG (1 << 25) #define CS_DMA_LEN (1 << 24) #define CS_CSPOL2 (1 << 23) #define CS_CSPOL1 (1 << 22) #define CS_CSPOL0 (1 << 21) #define CS_RXF (1 << 20) #define CS_RXR (1 << 19) #define CS_TXD (1 << 18) #define CS_RXD (1 << 17) #define CS_DONE (1 << 16) #define CS_LEN (1 << 13) #define CS_REN (1 << 12) #define CS_ADCS (1 << 11) #define CS_INTR (1 << 10) #define CS_INTD (1 << 9) #define CS_DMAEN (1 << 8) #define CS_TA (1 << 7) #define CS_CSPOL (1 << 6) #define CS_CLEAR_RX (1 << 5) #define CS_CLEAR_TX (1 << 4) #define CS_CPOL__SHIFT 3 #define CS_CPHA__SHIFT 2 #define CS_CS (1 << 0) #define CS_CS__SHIFT 0 ================================================ FILE: rpi_bm/part17/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part17/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include #include void init_printf(void* putp, io_device *dev); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part17/include/spi.h ================================================ #pragma once #include "common.h" void spi_init(); void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size); void spi_send(u8 chip_select, u8 *data, u32 size); void spi_recv(u8 chip_select, u8 *data, u32 size); ================================================ FILE: rpi_bm/part17/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) #define ESR_ELx_EC_SHIFT 26 #define ESR_ELx_EC_SVC64 0x15 #define ESR_ELx_EC_DABT_LOW 0x24 /* Holds the saved process state when an exception is taken to EL3 */ #define SPSR_EL3_D (1 << 9) // debug exception mask #define SPSR_EL3_A (1 << 8) // SError interrupt mask #define SPSR_EL3_I (1 << 7) // IRQ interrupt mask #define SPSR_EL3_F (1 << 6) // FIQ interrupt mask #define SPSR_EL3_MODE_EL3H 13 // AArch64 Exception level and selected Stack Pointer, 13 is EL.3h. #define SPSR_EL3_MODE_EL1H 5 // AArch64 Exception level and selected Stack Pointer, 5 is EL.1h. #define SPSR_EL3_VAL (SPSR_EL3_D | SPSR_EL3_A | SPSR_EL3_I | SPSR_EL3_F | SPSR_EL3_MODE_EL1H) #define TCR_TG1_4K (2 << 30) #define TCR_T1SZ ((64 - 48) << 16) #define TCR_TG0_4K (0 << 14) #define TCR_T0SZ (64 - 48) #define TCR_EL1_VAL (TCR_TG1_4K | TCR_T1SZ | TCR_TG0_4K | TCR_T0SZ) /* architectural feature access control register */ #define CPACR_EL1_FPEN (1 << 21) | (1 << 20) // don't trap SIMD/FP registers #define CPACR_EL1_ZEN (1 << 17) | (1 << 16) // don't trap SVE instructions #define CPACR_EL1_VAL (CPACR_EL1_FPEN | CPACR_EL1_ZEN) /* exception syndrome register EL1 (ESR_EL1) */ #define ESR_ELx_EC_SHIFT 26 #define ESR_ELx_EC_SVC64 0x15 #define ESR_ELx_EC_DA_LOW 0x24 ================================================ FILE: rpi_bm/part17/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part17/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part17/include/video.h ================================================ #pragma once #include "common.h" void video_set_resolution(u32 xres, u32 yres, u32 bpp); void video_draw_char(char c, u32 pox_x, u32 pos_y); void video_draw_string(char *s, u32 pos_x, u32 pos_y); void video_draw_pixel(u32 x, u32 y, u32 color); void video_clear(); void video_dma(); //comes from fontData.c u32 font_get_height(); u32 font_get_width(); bool font_get_pixel(char ch, u32 x, u32 y); ================================================ FILE: rpi_bm/part17/square_margin ================================================ ================================================ FILE: rpi_bm/part17/src/boot/boot.S ================================================ #include "mm.h" #include "sysregs.h" #include "mmu.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 #if INIT_MMU == 1 ldr x0, =CPACR_EL1_VAL msr CPACR_EL1, x0 ldr x0, =TCR_EL1_VAL msr TCR_EL1, x0 ldr x0, =MAIR_VALUE msr MAIR_EL1, x0 #endif adr x0, el1_entry msr elr_el3, x0 eret el1_entry: mov sp, #LOW_MEMORY adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero #if INIT_MMU == 1 bl init_mmu adrp x0, id_pgd msr ttbr0_el1, x0 mrs x0, sctlr_el1 mov x1, #SCTLR_MMU_ENABLED orr x0, x0, x1 msr sctlr_el1, x0 #endif bl kernel_main b proc_hang proc_hang: wfe b proc_hang .globl id_pgd_addr id_pgd_addr: adrp x0, id_pgd ret ================================================ FILE: rpi_bm/part17/src/boot/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part17/src/dma/dma.c ================================================ #include #include #include #include #include dma_channel channels[15]; static u16 channel_map = 0x1F35; static u16 allocate_channel(u32 channel) { if (!(channel & ~0x0F)) { if (channel_map & (1 << channel)) { channel_map &= ~(1 << channel); return channel; } return -1; } u16 i = channel == CT_NORMAL ? 6 : 12; for (; i >= 0; i--) { if (channel_map & (1 << i)) { channel_map &= ~(1 << i); return i; } } return CT_NONE; } dma_channel *dma_open_channel(u32 channel) { u32 _channel = allocate_channel(channel); if (_channel == CT_NONE) { printf("INVALID CHANNEL! %d\n", channel); return 0; } dma_channel *dma = (dma_channel *)&channels[_channel]; dma->channel = _channel; dma->block = (dma_control_block *)get_free_pages(1); dma->block->res[0] = 0; dma->block->res[1] = 0; REGS_DMA_ENABLE |= (1 << dma->channel); timer_sleep(3); REGS_DMA(dma->channel)->control |= CS_RESET; while(REGS_DMA(dma->channel)->control & CS_RESET) ; return dma; } void dma_close_channel(dma_channel *channel) { channel_map |= (1 << channel->channel); } void dma_setup_mem_copy(dma_channel *channel, void *dest, void *src, u32 length, u32 burst_length) { channel->block->transfer_info = (burst_length << TI_BURST_LENGTH_SHIFT) | TI_SRC_WIDTH | TI_SRC_INC | TI_DEST_WIDTH | TI_DEST_INC; channel->block->src_addr = (u32)src; channel->block->dest_addr = (u32)dest; channel->block->transfer_length = length; channel->block->mode_2d_stride = 0; channel->block->next_block_addr = 0; } void dma_start(dma_channel *channel) { REGS_DMA(channel->channel)->control_block_addr = BUS_ADDRESS((u32)channel->block); REGS_DMA(channel->channel)->control = CS_WAIT_FOR_OUTSTANDING_WRITES | (DEFAULT_PANIC_PRIORITY << CS_PANIC_PRIORITY_SHIFT) | (DEFAULT_PRIORITY << CS_PRIORITY_SHIFT) | CS_ACTIVE; } bool dma_wait(dma_channel *channel) { while(REGS_DMA(channel->channel)->control & CS_ACTIVE) ; channel->status = REGS_DMA(channel->channel)->control & CS_ERROR ? false : true; return channel->status; } ================================================ FILE: rpi_bm/part17/src/drivers/emmc/emmc.c ================================================ #include #include #include #include #include #include #include #include #include bool emmc_setup_clock(); bool switch_clock_rate(u32 base_clock, u32 target_rate); static emmc_device device = {0}; static const emmc_cmd INVALID_CMD = RES_CMD; bool wait_reg_mask(reg32 *reg, u32 mask, bool set, u32 timeout) { for (int cycles = 0; cycles <= timeout; cycles++) { if ((*reg & mask) ? set : !set) { return true; } timer_sleep(1); } return false; } static const emmc_cmd commands[] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, RES_CMD, {0, 0, 0, 0, 0, 0, RT136, 0, 1, 0, 0, 0, 2, 0}, {0, 0, 0, 0, 0, 0, RT48, 0, 1, 0, 0, 0, 3, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0}, {0, 0, 0, 0, 0, 0, RT136, 0, 0, 0, 0, 0, 5, 0}, {0, 0, 0, 0, 0, 0, RT48, 0, 1, 0, 0, 0, 6, 0}, {0, 0, 0, 0, 0, 0, RT48Busy, 0, 1, 0, 0, 0, 7, 0}, {0, 0, 0, 0, 0, 0, RT48, 0, 1, 0, 0, 0, 8, 0}, {0, 0, 0, 0, 0, 0, RT136, 0, 1, 0, 0, 0, 9, 0}, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, {0, 0, 0, 0, 0, 0, RT48, 0, 1, 0, 0, 0, 16, 0}, {0, 0, 0, 1, 0, 0, RT48, 0, 1, 0, 1, 0, 17, 0}, {0, 1, 1, 1, 1, 0, RT48, 0, 1, 0, 1, 0, 18, 0}, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, {0, 0, 0, 0, 0, 0, RT48, 0, 0, 0, 0, 0, 41, 0}, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, RES_CMD, {0, 0, 0, 1, 0, 0, RT48, 0, 1, 0, 1, 0, 51, 0}, RES_CMD, RES_CMD, RES_CMD, {0, 0, 0, 0, 0, 0, RT48, 0, 1, 0, 0, 0, 55, 0}, }; static u32 sd_error_mask(sd_error err) { return 1 << (16 + (u32)err); } static void set_last_error(u32 intr_val) { device.last_error = intr_val & 0xFFFF0000; device.last_interrupt = intr_val; } static bool do_data_transfer(emmc_cmd cmd) { u32 wrIrpt = 0; bool write = false; if (cmd.direction) { wrIrpt = 1 << 5; } else { wrIrpt = 1 << 4; write = true; } u32 *data = (u32 *)device.buffer; for (int block = 0; block < device.transfer_blocks; block++) { wait_reg_mask(&EMMC->int_flags, wrIrpt | 0x8000, true, 2000); u32 intr_val = EMMC->int_flags; EMMC->int_flags = wrIrpt | 0x8000; if ((intr_val & (0xffff0000 | wrIrpt)) != wrIrpt) { set_last_error(intr_val); return false; } u32 length = device.block_size; if (write) { for (; length > 0; length -= 4) { EMMC->data = *data++; } } else { for (; length > 0; length -= 4) { *data++ = EMMC->data; } } } return true; } static bool emmc_issue_command(emmc_cmd cmd, u32 arg, u32 timeout) { device.last_command_value = TO_REG(&cmd); reg32 command_reg = device.last_command_value; if (device.transfer_blocks > 0xFFFF) { printf("EMMC_ERR: transferBlocks too large: %d\n", device.transfer_blocks); return false; } EMMC->block_size_count = device.block_size | (device.transfer_blocks << 16); EMMC->arg1 = arg; EMMC->cmd_xfer_mode = command_reg; timer_sleep(10); int times = 0; while(times < timeout) { u32 reg = EMMC->int_flags; if (reg & 0x8001) { break; } timer_sleep(1); times++; } if (times >= timeout) { //just doing a warn for this because sometimes it's ok. printf("EMMC_WARN: emmc_issue_command timed out\n"); device.last_success = false; return false; } u32 intr_val = EMMC->int_flags; EMMC->int_flags = 0xFFFF0001; if ((intr_val & 0xFFFF0001) != 1) { if (EMMC_DEBUG) printf("EMMC_DEBUG: Error waiting for command interrupt complete: %d\n", cmd.index); set_last_error(intr_val); if (EMMC_DEBUG) printf("EMMC_DEBUG: IRQFLAGS: %X - %X - %X\n", EMMC->int_flags, EMMC->status, intr_val); device.last_success = false; return false; } switch(cmd.response_type) { case RT48: case RT48Busy: device.last_response[0] = EMMC->response[0]; break; case RT136: device.last_response[0] = EMMC->response[0]; device.last_response[1] = EMMC->response[1]; device.last_response[2] = EMMC->response[2]; device.last_response[3] = EMMC->response[3]; break; } if (cmd.is_data) { do_data_transfer(cmd); } if (cmd.response_type == RT48Busy || cmd.is_data) { wait_reg_mask(&EMMC->int_flags, 0x8002, true, 2000); intr_val = EMMC->int_flags; EMMC->int_flags = 0xFFFF0002; if ((intr_val & 0xFFFF0002) != 2 && (intr_val & 0xFFFF0002) != 0x100002) { set_last_error(intr_val); return false; } EMMC->int_flags = 0xFFFF0002; } device.last_success = true; return true; } static bool emmc_command(u32 command, u32 arg, u32 timeout) { if (command & 0x80000000) { //The app command flag is set, shoudl use emmc_app_command instead. printf("EMMC_ERR: COMMAND ERROR NOT APP\n"); return false; } device.last_command = commands[command]; if (TO_REG(&device.last_command) == TO_REG(&INVALID_CMD)) { printf("EMMC_ERR: INVALID COMMAND!\n"); return false; } return emmc_issue_command( device.last_command, arg, timeout); } static bool reset_command() { EMMC->control[1] |= EMMC_CTRL1_RESET_CMD; for (int i=0; i<10000; i++) { if (!( EMMC->control[1] & EMMC_CTRL1_RESET_CMD)) { return true; } timer_sleep(1); } printf("EMMC_ERR: Command line failed to reset properly: %X\n", EMMC->control[1]); return false; } bool emmc_app_command(u32 command, u32 arg, u32 timeout) { if (commands[command].index >= 60) { printf("EMMC_ERR: INVALID APP COMMAND\n"); return false; } device.last_command = commands[CTApp]; u32 rca = 0; if (device.rca) { rca = device.rca << 16; } if (emmc_issue_command( device.last_command, rca, 2000)) { device.last_command = commands[command]; return emmc_issue_command( device.last_command, arg, 2000); } return false; } static bool check_v2_card() { bool v2Card = false; if (!emmc_command( CTSendIfCond, 0x1AA, 200)) { if (device.last_error == 0) { //timeout. printf("EMMC_ERR: SEND_IF_COND Timeout\n"); } else if (device.last_error & (1 << 16)) { //timeout command error if (!reset_command()) { return false; } EMMC->int_flags = sd_error_mask(SDECommandTimeout); printf("EMMC_ERR: SEND_IF_COND CMD TIMEOUT\n"); } else { printf("EMMC_ERR: Failure sending SEND_IF_COND\n"); return false; } } else { if ((device.last_response[0] & 0xFFF) != 0x1AA) { printf("EMMC_ERR: Unusable SD Card: %X\n", device.last_response[0]); return false; } v2Card = true; } return v2Card; } static bool check_usable_card() { if (!emmc_command( CTIOSetOpCond, 0, 1000)) { if (device.last_error == 0) { //timeout. printf("EMMC_ERR: CTIOSetOpCond Timeout\n"); } else if (device.last_error & (1 << 16)) { //timeout command error //this is a normal expected error and calling the reset command will fix it. if (!reset_command()) { return false; } EMMC->int_flags = sd_error_mask(SDECommandTimeout); } else { printf("EMMC_ERR: SDIO Card not supported\n"); return false; } } return true; } static bool check_sdhc_support(bool v2_card) { bool card_busy = true; while(card_busy) { u32 v2_flags = 0; if (v2_card) { v2_flags |= (1 << 30); //SDHC Support } if (!emmc_app_command( CTOcrCheck, 0x00FF8000 | v2_flags, 2000)) { printf("EMMC_ERR: APP CMD 41 FAILED 2nd\n"); return false; } if (device.last_response[0] >> 31 & 1) { device.ocr = (device.last_response[0] >> 8 & 0xFFFF); device.sdhc = ((device.last_response[0] >> 30) & 1) != 0; card_busy = false; } else { if (EMMC_DEBUG) printf("EMMC_DEBUG: SLEEPING: %X\n", device.last_response[0]); timer_sleep(500); } } return true; } static bool check_ocr() { bool passed = false; for (int i=0; i<5; i++) { if (!emmc_app_command(CTOcrCheck, 0, 2000)) { printf("EMMC_WARN: APP CMD OCR CHECK TRY %d FAILED\n", i + 1); passed = false; } else { passed = true; } if (passed) { break; } return false; } if (!passed) { printf("EMMC_ERR: APP CMD 41 FAILED\n"); return false; } device.ocr = (device.last_response[0] >> 8 & 0xFFFF); if (EMMC_DEBUG) printf("MEMORY OCR: %X\n", device.ocr); return true; } static bool check_rca() { if (!emmc_command( CTSendCide, 0, 2000)) { printf("EMMC_ERR: Failed to send CID\n"); return false; } if (EMMC_DEBUG) printf("EMMC_DEBUG: CARD ID: %X.%X.%X.%X\n", device.last_response[0], device.last_response[1], device.last_response[2], device.last_response[3]); if (!emmc_command( CTSendRelativeAddr, 0, 2000)) { printf("EMMC_ERR: Failed to send Relative Addr\n"); return false; } device.rca = (device.last_response[0] >> 16) & 0xFFFF; if (EMMC_DEBUG) { printf("EMMC_DEBUG: RCA: %X\n", device.rca); printf("EMMC_DEBUG: CRC_ERR: %d\n", (device.last_response[0] >> 15) & 1); printf("EMMC_DEBUG: CMD_ERR: %d\n", (device.last_response[0] >> 14) & 1); printf("EMMC_DEBUG: GEN_ERR: %d\n", (device.last_response[0] >> 13) & 1); printf("EMMC_DEBUG: STS_ERR: %d\n", (device.last_response[0] >> 9) & 1); printf("EMMC_DEBUG: READY : %d\n", (device.last_response[0] >> 8) & 1); } if (!((device.last_response[0] >> 8) & 1)) { printf("EMMC_ERR: Failed to read RCA\n"); return false; } return true; } static bool select_card() { if (!emmc_command( CTSelectCard, device.rca << 16, 2000)) { printf("EMMC_ERR: Failed to select card\n"); return false; } if (EMMC_DEBUG) printf("EMMC_DEBUG: Selected Card\n"); u32 status = (device.last_response[0] >> 9) & 0xF; if (status != 3 && status != 4) { printf("EMMC_ERR: Invalid Status: %d\n", status); return false; } if (EMMC_DEBUG) printf("EMMC_DEBUG: Status: %d\n", status); return true; } static bool set_scr() { if (!device.sdhc) { if (!emmc_command( CTSetBlockLen, 512, 2000)) { printf("EMMC_ERR: Failed to set block len\n"); return false; } } u32 bsc = EMMC->block_size_count; bsc &= ~0xFFF; //mask off bottom bits bsc |= 0x200; //set bottom bits to 512 EMMC->block_size_count = bsc; device.buffer = &device.scr.scr[0]; device.block_size = 8; device.transfer_blocks = 1; if (!emmc_app_command( CTSendSCR, 0, 30000)) { printf("EMMC_ERR: Failed to send SCR\n"); return false; } if (EMMC_DEBUG) printf("EMMC_DEBUG: GOT SRC: SCR0: %X SCR1: %X BWID: %X\n", device.scr.scr[0], device.scr.scr[1], device.scr.bus_widths); device.block_size = 512; u32 scr0 = BSWAP32(device.scr.scr[0]); device.scr.version = 0xFFFFFFFF; u32 spec = (scr0 >> (56 - 32)) & 0xf; u32 spec3 = (scr0 >> (47 - 32)) & 0x1; u32 spec4 = (scr0 >> (42 - 32)) & 0x1; if (spec == 0) { device.scr.version = 1; } else if (spec == 1) { device.scr.version = 11; } else if (spec == 2) { if (spec3 == 0) { device.scr.version = 2; } else if (spec3 == 1) { if (spec4 == 0) { device.scr.version = 3; } if (spec4 == 1) { device.scr.version = 4; } } } if (EMMC_DEBUG) printf("EMMC_DEBUG: SCR Version: %d\n", device.scr.version); return true; } static bool emmc_card_reset() { EMMC->control[1] = EMMC_CTRL1_RESET_HOST; if (EMMC_DEBUG) printf("EMMC_DEBUG: Card resetting...\n"); if (!wait_reg_mask(&EMMC->control[1], EMMC_CTRL1_RESET_ALL, false, 2000)) { printf("EMMC_ERR: Card reset timeout!\n"); return false; } #if (RPI_VERSION == 4) //This enabled VDD1 bus power for SD card, needed for RPI 4. u32 c0 = EMMC->control[0]; c0 |= 0x0F << 8; EMMC->control[0] = c0; timer_sleep(3); #endif if (!emmc_setup_clock()) { return false; } //All interrupts go to interrupt register. EMMC->int_enable = 0; EMMC->int_flags = 0xFFFFFFFF; EMMC->int_mask = 0xFFFFFFFF; timer_sleep(203); device.transfer_blocks = 0; device.last_command_value = 0; device.last_success = false; device.block_size = 0; if (!emmc_command( CTGoIdle, 0, 2000)) { printf("EMMC_ERR: NO GO_IDLE RESPONSE\n"); return false; } bool v2_card = check_v2_card(); if (!check_usable_card()) { return false; } if (!check_ocr()) { return false; } if (!check_sdhc_support(v2_card)) { return false; } switch_clock_rate(device.base_clock, SD_CLOCK_NORMAL); timer_sleep(10); if (!check_rca()) { return false; } if (!select_card()) { return false; } if (!set_scr()) { return false; } //enable all interrupts EMMC->int_flags = 0xFFFFFFFF; if (EMMC_DEBUG) printf("EMMC_DEBUG: Card reset!\n"); return true; } int emmc_io_read(io_device *dev, void *b, u32 size) { return emmc_read((u8 *)b, size); } void emmc_io_seek(io_device *dev, u64 offset) { return emmc_seek(offset); } bool do_data_command(bool write, u8 *b, u32 bsize, u32 block_no) { if (!device.sdhc) { block_no *= 512; } if (bsize < device.block_size) { printf("EMMC_ERR: INVALID BLOCK SIZE: \n", bsize, device.block_size); return false; } device.transfer_blocks = bsize / device.block_size; if (bsize % device.block_size) { printf("EMMC_ERR: BAD BLOCK SIZE\n"); return false; } device.buffer = b; cmd_type command = CTReadBlock; if (write && device.transfer_blocks > 1) { command = CTWriteMultiple; } else if (write) { command = CTWriteBlock; } else if (!write && device.transfer_blocks > 1) { command = CTReadMultiple; } int retry_count = 0; int max_retries = 3; if (EMMC_DEBUG) printf("EMMC_DEBUG: Sending command: %d\n", command); while(retry_count < max_retries) { if (emmc_command( command, block_no, 5000)) { break; } if (++retry_count < max_retries) { printf("EMMC_WARN: Retrying data command\n"); } else { printf("EMMC_ERR: Giving up data command\n"); return false; } } return true; } int do_read(u8 *b, u32 bsize, u32 block_no) { //TODO ENSURE DATA MODE... if (!do_data_command( false, b, bsize, block_no)) { printf("EMMC_ERR: do_data_command failed\n"); return -1; } return bsize; } int emmc_read(u8 *buffer, u32 size) { if (device.offset % 512 != 0) { printf("EMMC_ERR: INVALID OFFSET: %d\n", device.offset); return -1; } u32 block = device.offset / 512; int r = do_read( buffer, size, block); if (r != size) { printf("EMMC_ERR: READ FAILED: %d\n", r); return -1; } return size; } void emmc_seek(u64 _offset) { device.offset = _offset; } static io_device emmc_io_device = { .name = "disk", .data = &device, .read = emmc_io_read, .seek = emmc_io_seek }; bool emmc_init() { io_device_register(&emmc_io_device); gpio_pin_set_func(34, GFInput); gpio_pin_set_func(35, GFInput); gpio_pin_set_func(36, GFInput); gpio_pin_set_func(37, GFInput); gpio_pin_set_func(38, GFInput); gpio_pin_set_func(39, GFInput); gpio_pin_set_func(48, GFAlt3); gpio_pin_set_func(49, GFAlt3); gpio_pin_set_func(50, GFAlt3); gpio_pin_set_func(51, GFAlt3); gpio_pin_set_func(52, GFAlt3); device.transfer_blocks = 0; device.last_command_value = 0; device.last_success = false; device.block_size = 0; device.sdhc = false; device.ocr = 0; device.rca = 0; device.offset = 0; device.base_clock = 0; bool success = false; for (int i=0; i<10; i++) { success = emmc_card_reset(); if (success) { break; } timer_sleep(100); printf("EMMC_WARN: Failed to reset card, trying again...\n"); } if (!success) { return false; } return true; } ================================================ FILE: rpi_bm/part17/src/drivers/emmc/emmc_clock.c ================================================ #include "peripherals/emmc.h" #include #include bool wait_reg_mask(reg32 *reg, u32 mask, bool set, u32 timeout); u32 get_clock_divider(u32 base_clock, u32 target_rate) { u32 target_div = 1; if (target_rate <= base_clock) { target_div = base_clock / target_rate; if (base_clock % target_rate) { target_div = 0; } } int div = -1; for (int fb = 31; fb >= 0; fb--) { u32 bt = (1 << fb); if (target_div & bt) { div = fb; target_div &= ~(bt); if (target_div) { div++; } break; } } if (div == -1) { div = 31; } if (div >= 32) { div = 31; } if (div != 0) { div = (1 << (div - 1)); } if (div >= 0x400) { div = 0x3FF; } u32 freqSel = div & 0xff; u32 upper = (div >> 8) & 0x3; u32 ret = (freqSel << 8) | (upper << 6) | (0 << 5); return ret; } bool switch_clock_rate(u32 base_clock, u32 target_rate) { u32 divider = get_clock_divider(base_clock, target_rate); while((EMMC->status & (EMMC_STATUS_CMD_INHIBIT | EMMC_STATUS_DAT_INHIBIT))) { timer_sleep(1); } u32 c1 = EMMC->control[1] & ~EMMC_CTRL1_CLK_ENABLE; EMMC->control[1] = c1; timer_sleep(3); EMMC->control[1] = (c1 | divider) & ~0xFFE0; timer_sleep(3); EMMC->control[1] = c1 | EMMC_CTRL1_CLK_ENABLE; timer_sleep(3); return true; } bool emmc_setup_clock() { EMMC->control2 = 0; u32 rate = mailbox_clock_rate(CT_EMMC); u32 n = EMMC->control[1]; n |= EMMC_CTRL1_CLK_INT_EN; n |= get_clock_divider(rate, SD_CLOCK_ID); n &= ~(0xf << 16); n |= (11 << 16); EMMC->control[1] = n; if (!wait_reg_mask(&EMMC->control[1], EMMC_CTRL1_CLK_STABLE, true, 2000)) { printf("EMMC_ERR: SD CLOCK NOT STABLE\n"); return false; } timer_sleep(30); //enabling the clock EMMC->control[1] |= 4; timer_sleep(30); return true; } ================================================ FILE: rpi_bm/part17/src/drivers/gpio/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part17/src/drivers/i2c/i2c.c ================================================ #include "gpio.h" #include "peripherals/i2c.h" #include "i2c.h" #include "printf.h" #define I2C_SPEED 100000 void i2c_init() { gpio_pin_set_func(2, GFAlt0); gpio_pin_set_func(3, GFAlt0); gpio_pin_enable(2); gpio_pin_enable(3); REGS_I2C->div = CORE_CLOCK_SPEED / I2C_SPEED; } i2c_status i2c_recv(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST | C_READ; while(!(REGS_I2C->status & S_DONE)) { while(REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } } while(count < size && REGS_I2C->status & S_RXD) { *buffer++ = REGS_I2C->fifo & 0xFF; count++; } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } i2c_status i2c_send(u8 address, u8 *buffer, u32 size) { int count = 0; REGS_I2C->slave_address = address; REGS_I2C->control = C_CLEAR; REGS_I2C->status = S_CLKT | S_ERR | S_DONE; REGS_I2C->data_length = size; REGS_I2C->control = C_I2CEN | C_ST; while(!(REGS_I2C->status & S_DONE)) { while(count < size && REGS_I2C->status & S_TXD) { REGS_I2C->fifo = *buffer++; count++; } } reg32 status = REGS_I2C->status; REGS_I2C->status = S_DONE; if (status & S_ERR) { return I2CS_ACK_ERROR; } else if (status & S_CLKT) { return I2CS_CLOCK_TIMEOUT; } else if (count < size) { return I2CS_DATA_LOSS; } return I2CS_SUCCESS; } ================================================ FILE: rpi_bm/part17/src/drivers/i2c/lcd.c ================================================ #include "lcd.h" #include "i2c.h" #include "timer.h" #include "printf.h" /* P0 -> RS P1 -> RW P2 -> E P3 -> BT (Backlight) P4 -> D4 P5 -> D5 P6 -> D6 P7 -> D7 */ typedef enum Flags { FLAG_RS = 1, FLAG_RW = 2, FLAG_EN = 4 }; // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // flags for function set #define LCD_8BITMODE 0x10 #define LCD_4BITMODE 0x00 #define LCD_2LINE 0x08 #define LCD_1LINE 0x00 #define LCD_5x10DOTS 0x04 #define LCD_5x8DOTS 0x00 #define LCD_BACKLIGHT 8 #define LCD_NOBACKLIGHT 0 static u8 _backlight = LCD_BACKLIGHT; static u8 _lcd_address = 0; static void write_i2c(u8 data) { u8 value = data | _backlight; i2c_send(_lcd_address, &value, 1); } //page 33 static void pulse(u8 data) { write_i2c(data | FLAG_EN); timer_sleep(5); write_i2c(data & ~FLAG_EN); timer_sleep(1); } static void write_4bits(u8 data) { write_i2c(data); pulse(data); } void lcd_send(u8 data, u8 mode) { write_4bits((data & 0xF0) | mode); write_4bits(((data << 4) & 0xF0) | mode); } void lcd_command(u8 command) { lcd_send(command, 0); } void lcd_init(u8 address) { _lcd_address = address; //page 46 write_4bits(3 << 4); timer_sleep(5); write_4bits(3 << 4); timer_sleep(1); write_4bits(3 << 4); write_4bits(2 << 4); lcd_command(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE); lcd_command(LCD_DISPLAYCONTROL | LCD_DISPLAYON); lcd_command(LCD_CLEARDISPLAY); timer_sleep(2); lcd_command(LCD_ENTRYMODESET | LCD_ENTRYLEFT); lcd_command(LCD_RETURNHOME); timer_sleep(2); } void lcd_backlight(bool on) { if (on) { _backlight = LCD_BACKLIGHT; } else { _backlight = LCD_NOBACKLIGHT; } write_i2c(0); } //page 42 : 6 void lcd_print(char *s) { while(*s) { lcd_send(*s, FLAG_RS); s++; } } ================================================ FILE: rpi_bm/part17/src/drivers/mailbox/mailbox.c ================================================ #include #include #include "printf.h" #include typedef struct { reg32 read; reg32 res[5]; reg32 status; reg32 config; reg32 write; } mailbox_regs; mailbox_regs *MBX() { return (mailbox_regs *)(PBASE + 0xB880); } typedef struct { u32 size; u32 code; u8 tags[0]; } property_buffer; static u32 property_data[8192] __attribute__((aligned(16))); #define MAIL_EMPTY 0x40000000 #define MAIL_FULL 0x80000000 #define MAIL_POWER 0x0 // Mailbox Channel 0: Power Management Interface #define MAIL_FB 0x1 // Mailbox Channel 1: Frame Buffer #define MAIL_VUART 0x2 // Mailbox Channel 2: Virtual UART #define MAIL_VCHIQ 0x3 // Mailbox Channel 3: VCHIQ Interface #define MAIL_LEDS 0x4 // Mailbox Channel 4: LEDs Interface #define MAIL_BUTTONS 0x5 // Mailbox Channel 5: Buttons Interface #define MAIL_TOUCH 0x6 // Mailbox Channel 6: Touchscreen Interface #define MAIL_COUNT 0x7 // Mailbox Channel 7: Counter #define MAIL_TAGS 0x8 // Mailbox Channel 8: Tags (ARM to VC) static void mailbox_write(u8 channel, u32 data) { while(MBX()->status & MAIL_FULL) ; MBX()->write = (data & 0xFFFFFFF0 | (channel & 0xF)); } static u32 mailbox_read(u8 channel) { while(true) { while(MBX()->status & MAIL_EMPTY) ; u32 data = MBX()->read; u8 read_channel = (u8)(data & 0xF); if (read_channel == channel) { return data & 0xFFFFFFF0; } } } bool mailbox_process(mailbox_tag *tag, u32 tag_size) { int buffer_size = tag_size + 12; memcpy(&property_data[2], tag, tag_size); property_buffer *buff = (property_buffer *)property_data; buff->size = buffer_size; buff->code = RPI_FIRMWARE_STATUS_REQUEST; property_data[(tag_size + 12) / 4 - 1] = RPI_FIRMWARE_PROPERTY_END; mailbox_write(MAIL_TAGS, (u32)(void *)property_data); int result = mailbox_read(MAIL_TAGS); memcpy(tag, property_data + 2, tag_size); return true; } bool mailbox_generic_command(u32 tag_id, u32 id, u32 *value) { mailbox_generic mbx; mbx.tag.id = tag_id; mbx.tag.value_length = 0; mbx.tag.buffer_size = sizeof(mailbox_generic) - sizeof(mailbox_tag); mbx.id = id; mbx.value = *value; if (!mailbox_process((mailbox_tag *)&mbx, sizeof(mbx))) { printf("FAILED TO PROCESS: %X\n", tag_id); return false; } *value = mbx.value; return true; } u32 mailbox_clock_rate(clock_type ct) { mailbox_clock c; c.tag.id = RPI_FIRMWARE_GET_CLOCK_RATE; c.tag.value_length = 0; c.tag.buffer_size = sizeof(c) - sizeof(c.tag); c.id = ct; mailbox_process((mailbox_tag *)&c, sizeof(c)); return c.rate; } bool mailbox_power_check(u32 type) { mailbox_power p; p.tag.id = RPI_FIRMWARE_GET_DOMAIN_STATE; p.tag.value_length = 0; p.tag.buffer_size = sizeof(p) - sizeof(p.tag); p.id = type; p.state = ~0; mailbox_process((mailbox_tag *)&p, sizeof(p)); return p.state && p.state != ~0; } ================================================ FILE: rpi_bm/part17/src/drivers/muart/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #include #define TXD 14 #define RXD 15 void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } int muart_read(struct _io_device *d, void *buff, u32 size) { u8 *buffer = buff; for (u32 i=0; ienables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); muart_device.name = "muart"; muart_device.read = muart_read; muart_device.write = muart_write; io_device_register(&muart_device); } ================================================ FILE: rpi_bm/part17/src/drivers/shared/io.c ================================================ #include #define MAX_DEVS 10 static io_device *devices[MAX_DEVS] = {0}; bool io_device_register(io_device *dev) { for (int i=0; iname, name)) { return devices[i]; } } return 0; } ================================================ FILE: rpi_bm/part17/src/drivers/spi/led_display.c ================================================ #include "led_display.h" #include "spi.h" const static u8 DIGIT_TABLE [] = { 0b01111110,0b00110000,0b01101101,0b01111001,0b00110011,0b01011011,0b01011111,0b01110000, 0b01111111,0b01111011 }; void led_display_init() { led_display_send_command(LD_SCANLIMIT, 7); led_display_send_command(LD_DECODE_MODE, 0); led_display_send_command(LD_SHUTDOWN, 1); led_display_send_command(LD_INTENSITY, 0); led_display_send_command(LD_DISPLAYTEST, 0); led_display_intensity(5); } void led_display_send_command(u8 opcode, u8 data) { u8 cmd[2]; cmd[0] = opcode; cmd[1] = data; spi_send(0, cmd, 2); } void led_display_clear() { for (int i=LD_DIGIT0; i<=LD_DIGIT7; i++) { led_display_send_command(i, 0); } } void led_display_intensity(u8 value) { led_display_send_command(LD_INTENSITY, value); } void led_display_set_digit(u8 digit, u8 value, bool dot) { u8 digit_value = DIGIT_TABLE[value]; if (dot) { digit_value |= 0x80; } led_display_send_command(LD_DIGIT0 + digit, digit_value); } ================================================ FILE: rpi_bm/part17/src/drivers/spi/spi.c ================================================ #include "spi.h" #include "peripherals/spi.h" #include "gpio.h" #include "printf.h" void spi_init() { gpio_pin_set_func(7, GFAlt0); //CS1 gpio_pin_set_func(8, GFAlt0); //CS0 -> CS (red) gpio_pin_set_func(9, GFAlt0); //MISO gpio_pin_set_func(10, GFAlt0);//MOSI -> DIN (brown) gpio_pin_set_func(11, GFAlt0);//SCLK -> CLK (orange) gpio_pin_enable(7); gpio_pin_enable(8); gpio_pin_enable(9); gpio_pin_enable(10); gpio_pin_enable(11); } void spi_send_recv(u8 chip_select, u8 *sbuffer, u8 *rbuffer, u32 size) { REGS_SPI0->data_length = size; REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_CS) | (chip_select << CS_CS__SHIFT) | CS_CLEAR_RX | CS_CLEAR_TX | CS_TA; u32 read_count = 0; u32 write_count = 0; while(read_count < size || write_count < size) { while(write_count < size && REGS_SPI0->cs & CS_TXD) { if (sbuffer) { REGS_SPI0->fifo = *sbuffer++; } else { REGS_SPI0->fifo = 0; } write_count++; } while(read_count < size && REGS_SPI0->cs & CS_RXD) { u32 data = REGS_SPI0->fifo; if (rbuffer) { *rbuffer++ = data; } read_count++; } } while(!(REGS_SPI0->cs & CS_DONE)) { while(REGS_SPI0->cs & CS_RXD) { u32 r = REGS_SPI0->fifo; printf("Left Over: %d\n", r); } } REGS_SPI0->cs = (REGS_SPI0->cs & ~CS_TA); } void spi_send(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, data, 0, size); } void spi_recv(u8 chip_select, u8 *data, u32 size) { spi_send_recv(chip_select, 0, data, size); } ================================================ FILE: rpi_bm/part17/src/drivers/video/fontData.c ================================================ // lat1-16 console font (ISO-8859-1) // // Taken from the Linux "kbd - Keyboard and Font Utilities" package // by Andries Brouwer // Alexey Gladkov // Portions by Paul Gortmaker // Licensed under GPLv2+ // #include "common.h" static const unsigned width = 8; static const unsigned height = 16; static const unsigned extraheight = 3; static const unsigned char font_data[224][16] = { {0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0x7C, 0x16, 0x16, 0xD6, 0x7C, 0x10, 0x10, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6, 0xE6, 0xE6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE, 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00}, {0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x64, 0x38, 0x0C, 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00}, {0x00, 0x30, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00}, {0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC3, 0x99, 0x99, 0xF3, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0x7E, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x10, 0x7C, 0xD6, 0xD0, 0xD0, 0xD0, 0xD6, 0x7C, 0x10, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x60, 0x60, 0xF0, 0x60, 0x60, 0x66, 0xF6, 0x6C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xC6, 0x7C, 0x6C, 0x6C, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0x99, 0xA5, 0xA1, 0xA5, 0x99, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5, 0xA5, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00}, {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x30, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x18, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF6, 0xC0, 0xC0, 0xC0, 0x00}, {0x00, 0x00, 0x7F, 0xD6, 0xD6, 0x76, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x6C, 0x38, 0x00}, {0x30, 0x70, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x60, 0xE0, 0x60, 0x60, 0xF6, 0x0C, 0x18, 0x30, 0x6E, 0xDB, 0x06, 0x0C, 0x1F, 0x00, 0x00, 0x00}, {0x70, 0xD8, 0x30, 0xD8, 0x76, 0x0C, 0x18, 0x30, 0x66, 0xCE, 0x1A, 0x3F, 0x06, 0x06, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, 0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3E, 0x78, 0xD8, 0xD8, 0xFC, 0xD8, 0xD8, 0xD8, 0xD8, 0xDE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x0C, 0x66, 0x3C, 0x00}, {0x60, 0x30, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xFE, 0x66, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x08, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x18, 0x3C, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0xF6, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7E, 0xC6, 0xCE, 0xCE, 0xDE, 0xF6, 0xE6, 0xE6, 0xC6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x60, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x10, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x06, 0x0C, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xCC, 0xC6, 0xC6, 0xC6, 0xD6, 0xDC, 0x80, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0x1B, 0x7F, 0xD8, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x18, 0x6C, 0x38, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x78, 0x30, 0x78, 0x0C, 0x7E, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xCE, 0xDE, 0xFE, 0xF6, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0C, 0x18, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00}, {0x00, 0x00, 0xF0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00} }; #define FIRSTCHAR 0x21 #define LASTCHAR 0xFF #define CHARCOUNT (LASTCHAR - FIRSTCHAR + 1) u32 font_get_height() { return height + extraheight; } u32 font_get_width() { return width; } bool font_get_pixel(char ch, u32 x, u32 y) { if (ch < FIRSTCHAR || ch > LASTCHAR) { return false; } u32 index = ch - FIRSTCHAR; if (y >= height) { return false; } return font_data[index][y] & (0x80 >> x) ? true : false; } ================================================ FILE: rpi_bm/part17/src/drivers/video/video.c ================================================ #include "mailbox.h" #include "printf.h" #include "timer.h" #include "video.h" #include "dma.h" #include "mm.h" #include "mem.h" typedef struct { mailbox_tag tag; u32 xres; u32 yres; } mailbox_fb_size; typedef struct { mailbox_tag tag; u32 bpp; } mailbox_fb_depth; typedef struct { mailbox_tag tag; u32 pitch; } mailbox_fb_pitch; typedef struct { mailbox_tag tag; u32 base; u32 screen_size; } mailbox_fb_buffer; typedef struct { mailbox_fb_size res; mailbox_fb_size vres; //virtual resolution.. mailbox_fb_depth depth; mailbox_fb_buffer buff; mailbox_fb_pitch pitch; } mailbox_fb_request; static mailbox_fb_request fb_req; static dma_channel *dma; static u8 *vid_buffer; static u32 *bg32_buffer; static u32 *bg8_buffer; #define TEXT_COLOR 0xFFFFFFFF #define BACK_COLOR 0xFF0055BB #define MB (1024 * 1024) void video_init() { dma = dma_open_channel(CT_NORMAL); vid_buffer = (u8 *)allocate_memory(10 * MB); printf("DMA CHANNEL: %d\n", dma->channel); printf("VID BUFF: %X\n", vid_buffer); bg32_buffer = (u32 *)allocate_memory(10 * MB); bg8_buffer = (u32 *)allocate_memory(4 * MB); for (int i=0; i<(10 * MB) / 4; i++) { bg32_buffer[i] = BACK_COLOR; } for (int i=0; i<(4 * MB) / 4; i++) { bg8_buffer[i] = 0x01010101; } } static bool use_dma = false; #define BUS_ADDR(x) (((u64)x | 0x40000000) & ~0xC0000000) #define FRAMEBUFFER ((volatile u8 *)BUS_ADDR(fb_req.buff.base)) #define DMABUFFER ((volatile u8 *)vid_buffer) #define DRAWBUFFER (use_dma ? DMABUFFER : FRAMEBUFFER) void video_set_dma(bool b) { use_dma = b; } void do_dma(void *dest, void *src, u32 total) { u32 ms_start = timer_get_ticks() / 1000; u32 start = 0; while(total > 0) { int num_bytes = total; if (num_bytes > 0xFFFFFF) { num_bytes = 0xFFFFFF; } dma_setup_mem_copy(dma, dest + start, src + start, num_bytes, 2); dma_start(dma); dma_wait(dma); start += num_bytes; total -= num_bytes; } u32 ms_end = timer_get_ticks() / 1000; //ms ticks when done... printf("DMA took %d ms\n", (ms_end - ms_start)); } void video_dma() { do_dma(FRAMEBUFFER, DMABUFFER, fb_req.buff.screen_size); } typedef struct { mailbox_tag tag; u32 offset; u32 num_entries; u32 entries[8]; } mailbox_set_palette; void video_set_resolution(u32 xres, u32 yres, u32 bpp) { fb_req.res.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT; fb_req.res.tag.buffer_size = 8; fb_req.res.tag.value_length = 8; fb_req.res.xres = xres; fb_req.res.yres = yres; fb_req.vres.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT; fb_req.vres.tag.buffer_size = 8; fb_req.vres.tag.value_length = 8; fb_req.vres.xres = xres; fb_req.vres.yres = yres; fb_req.depth.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH; fb_req.depth.tag.buffer_size = 4; fb_req.depth.tag.value_length = 4; fb_req.depth.bpp = bpp; fb_req.buff.tag.id = RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE; fb_req.buff.tag.buffer_size = 8; fb_req.buff.tag.value_length = 4; fb_req.buff.base = 16; fb_req.buff.screen_size = 0; fb_req.pitch.tag.id = RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH; fb_req.pitch.tag.buffer_size = 4; fb_req.pitch.tag.value_length = 4; fb_req.pitch.pitch = 0; mailbox_set_palette palette; palette.tag.id = RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE; palette.tag.buffer_size = 40; palette.tag.value_length = 0; palette.offset = 0; palette.num_entries = 8; palette.entries[0] = 0; palette.entries[1] = 0xFFBB5500; palette.entries[2] = 0xFFFFFFFF; palette.entries[3] = 0xFFFF0000; palette.entries[4] = 0xFF00FF00; palette.entries[5] = 0xFF0000FF; palette.entries[6] = 0x55555555; palette.entries[7] = 0xCCCCCCCC; //sets the actual resolution mailbox_process((mailbox_tag *)&fb_req, sizeof(fb_req)); printf("Allocated Buffer: %X - %d - %d\n", fb_req.buff.base, fb_req.buff.screen_size, fb_req.depth.bpp); if (bpp == 8) { mailbox_process((mailbox_tag *)&palette, sizeof(palette)); } //draw some text showing what resolution is... char res[64]; for (int i=0; i<4; i++) { u64 ms_start = timer_get_ticks() / 1000; //get ticks in ms before drawing on screen... if (fb_req.depth.bpp == 32) { if (!use_dma) { u32 *buff = (u32 *)FRAMEBUFFER; for (int i=0; i> 3)) + (y * fb_req.pitch.pitch); if (fb_req.depth.bpp == 32) { u32 *buff = (u32 *)DRAWBUFFER; buff[pixel_offset / 4] = color; } else if (fb_req.depth.bpp == 16) { u16 *buff = (u16 *)DRAWBUFFER; buff[pixel_offset / 2] = color & 0xFFFF; } else { DRAWBUFFER[pixel_offset++] = (color & 0xFF); } } void video_draw_char(char c, u32 pos_x, u32 pos_y) { u32 text_color = TEXT_COLOR; u32 back_color = BACK_COLOR; if (fb_req.depth.bpp == 8) { text_color = 2; back_color = 1; } for (int y=0; yirq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part17/src/kernel/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" #include "i2c.h" #include "spi.h" #include "led_display.h" #include "mailbox.h" #include "video.h" #include #include "peripherals/emmc.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); #define BOOT_SIGNATURE 0xAA55 typedef struct PACKED { u8 head; u8 sector : 6; u8 cylinder_hi : 2; u8 cylinder_lo; } chs_address ; typedef struct PACKED { u8 status; chs_address first_sector; u8 type; chs_address last_sector; u32 first_lba_sector; u32 num_sectors; } partition_entry ; typedef struct PACKED { u8 bootCode[0x1BE]; partition_entry partitions[4]; u16 bootSignature; } master_boot_record; void kernel_main() { uart_init(); init_printf(0, io_device_find("muart")); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif #if INIT_MMU == 1 printf("Initialized MMU\n"); #endif if (!emmc_init()) { printf("FAILED TO INIT EMMC\n"); return; } printf("EMMC Disk initialized\n"); master_boot_record mbr; io_device *disk = io_device_find("disk"); int r = disk->read(disk, &mbr, sizeof(mbr)); printf("Read disk returned: %d\n", r); if (mbr.bootSignature != BOOT_SIGNATURE) { printf("BAD BOOT SIGNATURE: %X\n", mbr.bootSignature); } for (int i=0; i<4; i++) { if (mbr.partitions[i].type == 0) { break; } printf("Partition %d:\n", i); printf("\t Type: %d\n", mbr.partitions[i].type); printf("\t NumSecs: %d\n", mbr.partitions[i].num_sectors); printf("\t Status: %d\n", mbr.partitions[i].status); printf("\t Start: %X\n", mbr.partitions[i].first_lba_sector); } timer_sleep(15000); void *p1 = get_free_pages(10); void *p2 = get_free_pages(4); void *p3 = allocate_memory(20 * 4096 + 1); free_memory(p1); free_memory(p2); free_memory(p3); printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Initializing I2C...\n"); i2c_init(); for (u8 i=0x20; i<0x30; i++) { if (i2c_send(i, &i, 1) == I2CS_SUCCESS) { //we know there is an i2c device here now. printf("Found device at address 0x%X\n", i); } } printf("Initializing SPI...\n"); spi_init(); printf("MAILBOX:\n"); printf("CORE CLOCK: %d\n", mailbox_clock_rate(CT_CORE)); printf("EMMC CLOCK: %d\n", mailbox_clock_rate(CT_EMMC)); printf("UART CLOCK: %d\n", mailbox_clock_rate(CT_UART)); printf("ARM CLOCK: %d\n", mailbox_clock_rate(CT_ARM)); printf("I2C POWER STATE:\n"); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(2000); for (int i=0; i<3; i++) { u32 on = 1; mailbox_generic_command(RPI_FIRMWARE_SET_DOMAIN_STATE, i, &on); printf("SET POWER DOMAIN STATUS FOR %d = %d\n", i, on); } //timer_sleep(1000); for (int i=0; i<3; i++) { bool on = mailbox_power_check(i); printf("POWER DOMAIN STATUS FOR %d = %d\n", i, on); } u32 max_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_MAX_TEMPERATURE, 0, &max_temp); //Do video... video_init(); printf("NO DMA...\n"); video_set_dma(false); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 32); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 32); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 32); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 8); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 8); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 8); printf("YES DMA...\n"); video_set_dma(true); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 32); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 32); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 32); printf("Resolution 1900x1200\n"); video_set_resolution(1900, 1200, 8); printf("Resolution 1024x768\n"); video_set_resolution(1024, 768, 8); printf("Resolution 800x600\n"); video_set_resolution(800, 600, 8); while(1) { u32 cur_temp = 0; mailbox_generic_command(RPI_FIRMWARE_GET_TEMPERATURE, 0, &cur_temp); printf("Cur temp: %dC MAX: %dC\n", cur_temp / 1000, max_temp / 1000); timer_sleep(1000); } } ================================================ FILE: rpi_bm/part17/src/kernel/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part17/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; . = ALIGN(0x00001000); id_pgd = .; .data.id_pgd : { . += (6 * (1 << 12)); } } ================================================ FILE: rpi_bm/part17/src/mem/mem.c ================================================ #include #include #include #include #include static u16 mem_map [ PAGING_PAGES ] = {0,}; void *allocate_memory(int bytes) { int pages = bytes / PAGE_SIZE; if (bytes % PAGE_SIZE) { pages++; } return get_free_pages(pages); } void free_memory(void *base) { u64 page_num = (((u64)base) - LOW_MEMORY) / PAGE_SIZE; int pages = mem_map[page_num]; printf("free_memory at address %X page num: %d pages: %d\n", base, page_num, pages); for (int i=0; i> shift; table_index &= (ENTRIES_PER_TABLE - 1); u64 descriptor = next_tbl | flags; *((u64 *)(tbl + (table_index << 3))) = descriptor; } void create_block_map(u64 pmd, u64 vstart, u64 vend, u64 pa) { vstart >>= SECTION_SHIFT; vstart &= (ENTRIES_PER_TABLE -1); vend >>= SECTION_SHIFT; vend--; vend &= (ENTRIES_PER_TABLE - 1); pa >>= SECTION_SHIFT; pa <<= SECTION_SHIFT; do { u64 _pa = pa; if (pa >= DEVICE_START) { _pa |= TD_DEVICE_BLOCK_FLAGS; } else { _pa |= TD_KERNEL_BLOCK_FLAGS; } *((u64 *)(pmd + (vstart << 3))) = _pa; pa += SECTION_SIZE; vstart++; } while(vstart <= vend); } u64 id_pgd_addr(); void init_mmu() { u64 id_pgd = id_pgd_addr(); memzero(id_pgd, ID_MAP_TABLE_SIZE); u64 map_base = 0; u64 tbl = id_pgd; u64 next_tbl = tbl + PAGE_SIZE; create_table_entry(tbl, next_tbl, map_base, PGD_SHIFT, TD_KERNEL_TABLE_FLAGS); tbl += PAGE_SIZE; next_tbl += PAGE_SIZE; u64 block_tbl = tbl; for (u64 i=0; i<4; i++) { create_table_entry(tbl, next_tbl, map_base, PUD_SHIFT, TD_KERNEL_TABLE_FLAGS); next_tbl += PAGE_SIZE; map_base += PUD_ENTRY_MAP_SIZE; block_tbl += PAGE_SIZE; u64 offset = BLOCK_SIZE * i; create_block_map(block_tbl, offset, offset + BLOCK_SIZE, offset); } } ================================================ FILE: rpi_bm/part17/src/mem/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part17/src/misc/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" #include typedef void (*putcf) (void*,char); static void* stdout_putp; io_device *printf_device; static void stdout_putf(void *p, char c) { printf_device->write(printf_device, &c, 1); } #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp, io_device *dev) { printf_device = dev; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part17/src/misc/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part17/src/misc/utils.c ================================================ #include "utils.h" #include "mem.h" bool str_eq(char *a, char *b) { while(*a) { if (*a++ != *b++) { return false; } } return *a == *b; } int strcat(char *dst, char *src) { dst += strlen(dst); return strcpy(dst, src); } int strcpy(char *dst, char *src) { int count = 0; while(*src) { *dst++ = *src++; count++; } *dst = 0; return count; } int strlen(char *s) { int count = 0; while(*s++) { count++; } return count; } ================================================ FILE: rpi_bm/part6-7/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part6-7/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part6-7/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part6-7/include/common.h ================================================ #pragma once #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part6-7/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part6-7/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part6-7/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part6-7/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part6-7/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif ================================================ FILE: rpi_bm/part6-7/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part6-7/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part6-7/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part6-7/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part6-7/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part6-7/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part6-7/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); while(1) { uart_send(uart_recv()); } } ================================================ FILE: rpi_bm/part6-7/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part6-7/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part6-7/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part6-7/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part6-7/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part8/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part8/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part8/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part8/include/common.h ================================================ #pragma once #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part8/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part8/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part8/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part8/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part8/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part8/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part8/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif ================================================ FILE: rpi_bm/part8/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part8/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" enum vc_irqs { AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part8/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part8/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part8/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part8/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part8/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part8/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part8/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part8/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } } } ================================================ FILE: rpi_bm/part8/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); while(1) { //uart_send(uart_recv()); } } ================================================ FILE: rpi_bm/part8/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part8/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 2; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part8/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part8/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part8/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret ================================================ FILE: rpi_bm/part9/Makefile ================================================ RPI_VERSION ?= 4 BOOTMNT ?= /media/parallels/boot ARMGNU ?= aarch64-linux-gnu COPS = -DRPI_VERSION=$(RPI_VERSION) -Wall -nostdlib -nostartfiles -ffreestanding \ -Iinclude -mgeneral-regs-only ASMOPS = -Iinclude BUILD_DIR = build SRC_DIR = src all : kernel8.img clean : rm -rf $(BUILD_DIR) *.img $(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ $(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ C_FILES = $(wildcard $(SRC_DIR)/*.c) ASM_FILES = $(wildcard $(SRC_DIR)/*.S) OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o) OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o) DEP_FILES = $(OBJ_FILES:%.o=%.d) -include $(DEP_FILES) kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES) @echo "Building for RPI $(value RPI_VERSION)" @echo "Deploy to $(value BOOTMNT)" @echo "" $(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES) $(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel8.img ifeq ($(RPI_VERSION), 4) cp kernel8.img $(BOOTMNT)/kernel8-rpi4.img else cp kernel8.img $(BOOTMNT)/ endif cp config.txt $(BOOTMNT)/ sync armstub/build/armstub_s.o: armstub/src/armstub.S mkdir -p $(@D) $(ARMGNU)-gcc $(COPS) -MMD -c $< -o $@ armstub: armstub/build/armstub_s.o $(ARMGNU)-ld --section-start=.text=0 -o armstub/build/armstub.elf armstub/build/armstub_s.o $(ARMGNU)-objcopy armstub/build/armstub.elf -O binary armstub-new.bin cp armstub-new.bin $(BOOTMNT)/ sync ================================================ FILE: rpi_bm/part9/armstub/src/armstub.S ================================================ .globl _start _start: ldr w0, kernel_entry32 br x0 .ltorg .org 0xf0 .globl stub_magic stub_magic: .word 0x5afe570b .org 0xf4 .globl stub_version stub_version: .word 0 .org 0xfc .globl kernel_entry32 kernel_entry32: .word 0x0 ================================================ FILE: rpi_bm/part9/config.txt ================================================ arm_64bit=1 uart_2ndstage=1 dtoverlay=miniuart-bt armstub=armstub-new.bin [pi4] kernel=kernel8-rpi4.img ================================================ FILE: rpi_bm/part9/include/common.h ================================================ #pragma once #include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef volatile u32 reg32; ================================================ FILE: rpi_bm/part9/include/entry.h ================================================ #pragma once //D1.10.2 #define SYNC_INVALID_EL1t 0 #define IRQ_INVALID_EL1t 1 #define FIQ_INVALID_EL1t 2 #define ERROR_INVALID_EL1t 3 #define SYNC_INVALID_EL1h 4 #define IRQ_INVALID_EL1h 5 #define FIQ_INVALID_EL1h 6 #define ERROR_INVALID_EL1h 7 #define SYNC_INVALID_EL0_64 8 #define IRQ_INVALID_EL0_64 9 #define FIQ_INVALID_EL0_64 10 #define ERROR_INVALID_EL0_64 11 #define SYNC_INVALID_EL0_32 12 #define IRQ_INVALID_EL0_32 13 #define FIQ_INVALID_EL0_32 14 #define ERROR_INVALID_EL0_32 15 //stack frame size #define S_FRAME_SIZE 256 ================================================ FILE: rpi_bm/part9/include/gpio.h ================================================ #pragma once #include "peripherals/gpio.h" typedef enum _GpioFunc { GFInput = 0, GFOutput = 1, GFAlt0 = 4, GFAlt1 = 5, GFAlt2 = 6, GFAlt3 = 7, GFAlt4 = 3, GFAlt5 = 2 } GpioFunc; void gpio_pin_set_func(u8 pinNumber, GpioFunc func); void gpio_pin_enable(u8 pinNumber); ================================================ FILE: rpi_bm/part9/include/irq.h ================================================ #pragma once void irq_init_vectors(); void irq_enable(); void irq_disable(); void enable_interrupt_controller(); ================================================ FILE: rpi_bm/part9/include/mini_uart.h ================================================ #pragma once void uart_init(); char uart_recv(); void uart_send(char c); void uart_send_string(char *str); ================================================ FILE: rpi_bm/part9/include/mm.h ================================================ #pragma once #define PAGE_SHIFT 12 #define TABLE_SHIFT 9 #define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) #define PAGE_SIZE (1 << PAGE_SHIFT) #define SECTION_SIZE (1 << SECTION_SHIFT) #define LOW_MEMORY (2 * SECTION_SIZE) #ifndef __ASSEMBLER__ void memzero(unsigned long src, unsigned int n); #endif ================================================ FILE: rpi_bm/part9/include/peripherals/aux.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct AuxRegs { reg32 irq_status; reg32 enables; reg32 reserved[14]; reg32 mu_io; reg32 mu_ier; reg32 mu_iir; reg32 mu_lcr; reg32 mu_mcr; reg32 mu_lsr; reg32 mu_msr; reg32 mu_scratch; reg32 mu_control; reg32 mu_status; reg32 mu_baud_rate; }; #define REGS_AUX ((struct AuxRegs *)(PBASE + 0x00215000)) ================================================ FILE: rpi_bm/part9/include/peripherals/base.h ================================================ #pragma once #if RPI_VERSION == 3 #define PBASE 0x3F000000 #elif RPI_VERSION == 4 #define PBASE 0xFE000000 #else #define PBASE 0 #error RPI_VERSION NOT DEFINED #endif ================================================ FILE: rpi_bm/part9/include/peripherals/gpio.h ================================================ #pragma once #include "common.h" #include "peripherals/base.h" struct GpioPinData { reg32 reserved; reg32 data[2]; }; struct GpioRegs { reg32 func_select[6]; struct GpioPinData output_set; struct GpioPinData output_clear; struct GpioPinData level; struct GpioPinData ev_detect_status; struct GpioPinData re_detect_enable; struct GpioPinData fe_detect_enable; struct GpioPinData hi_detect_enable; struct GpioPinData lo_detect_enable; struct GpioPinData async_re_detect; struct GpioPinData async_fe_detect; reg32 reserved; reg32 pupd_enable; reg32 pupd_enable_clocks[2]; }; #define REGS_GPIO ((struct GpioRegs *)(PBASE + 0x00200000)) ================================================ FILE: rpi_bm/part9/include/peripherals/irq.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" //6.2.4 enum vc_irqs { SYS_TIMER_IRQ_0 = 1, SYS_TIMER_IRQ_1 = 2, SYS_TIMER_IRQ_2 = 4, SYS_TIMER_IRQ_3 = 8, AUX_IRQ = (1 << 29) }; struct arm_irq_regs_2711 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 res0; reg32 irq0_enable_0; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 res1; reg32 irq0_disable_0; reg32 irq0_disable_1; reg32 irq0_disable_2; }; struct arm_irq_regs_2837 { reg32 irq0_pending_0; reg32 irq0_pending_1; reg32 irq0_pending_2; reg32 fiq_control; reg32 irq0_enable_1; reg32 irq0_enable_2; reg32 irq0_enable_0; reg32 res; reg32 irq0_disable_1; reg32 irq0_disable_2; reg32 irq0_disable_0; }; #if RPI_VERSION == 3 typedef struct arm_irq_regs_2837 arm_irq_regs; #endif #if RPI_VERSION == 4 typedef struct arm_irq_regs_2711 arm_irq_regs; #endif #define REGS_IRQ ((arm_irq_regs *)(PBASE + 0x0000B200)) ================================================ FILE: rpi_bm/part9/include/peripherals/timer.h ================================================ #pragma once #include "peripherals/base.h" #include "common.h" #define CLOCKHZ 1000000 //10.2 struct timer_regs { reg32 control_status; reg32 counter_lo; reg32 counter_hi; reg32 compare[4]; }; #define REGS_TIMER ((struct timer_regs *)(PBASE + 0x00003000)) ================================================ FILE: rpi_bm/part9/include/printf.h ================================================ /* File: printf.h Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA This library is really just two files: 'printf.h' and 'printf.c'. They provide a simple and small (+200 loc) printf functionality to be used in embedded systems. I've found them so usefull in debugging that I do not bother with a debugger at all. They are distributed in source form, so to use them, just compile them into your project. Two printf variants are provided: printf and sprintf. The formats supported by this implementation are: 'd' 'u' 'c' 's' 'x' 'X'. Zero padding and field width are also supported. If the library is compiled with 'PRINTF_SUPPORT_LONG' defined then the long specifier is also supported. Note that this will pull in some long math routines (pun intended!) and thus make your executable noticably longer. The memory foot print of course depends on the target cpu, compiler and compiler options, but a rough guestimate (based on a H8S target) is about 1.4 kB for code and some twenty 'int's and 'char's, say 60 bytes of stack space. Not too bad. Your milage may vary. By hacking the source code you can get rid of some hunred bytes, I'm sure, but personally I feel the balance of functionality and flexibility versus code size is close to optimal for many embedded systems. To use the printf you need to supply your own character output function, something like : void putc ( void* p, char c) { while (!SERIAL_PORT_EMPTY) ; SERIAL_PORT_TX_REGISTER = c; } Before you can call printf you need to initialize it to use your character output function with something like: init_printf(NULL,putc); Notice the 'NULL' in 'init_printf' and the parameter 'void* p' in 'putc', the NULL (or any pointer) you pass into the 'init_printf' will eventually be passed to your 'putc' routine. This allows you to pass some storage space (or anything really) to the character output function, if necessary. This is not often needed but it was implemented like that because it made implementing the sprintf function so neat (look at the source code). The code is re-entrant, except for the 'init_printf' function, so it is safe to call it from interupts too, although this may result in mixed output. If you rely on re-entrancy, take care that your 'putc' function is re-entrant! The printf and sprintf functions are actually macros that translate to 'tfp_printf' and 'tfp_sprintf'. This makes it possible to use them along with 'stdio.h' printf's in a single source file. You just need to undef the names before you include the 'stdio.h'. Note that these are not function like macros, so if you have variables or struct members with these names, things will explode in your face. Without variadic macros this is the best we can do to wrap these fucnction. If it is a problem just give up the macros and use the functions directly or rename them. For further details see source code. regs Kusti, 23.10.2004 */ #ifndef __TFP_PRINTF__ #define __TFP_PRINTF__ #include void init_printf(void* putp,void (*putf) (void*,char)); void tfp_printf(char *fmt, ...); void tfp_sprintf(char* s,char *fmt, ...); void tfp_format(void* putp,void (*putf) (void*,char),char *fmt, va_list va); #define printf tfp_printf #define sprintf tfp_sprintf #endif ================================================ FILE: rpi_bm/part9/include/sysregs.h ================================================ #pragma once //D13.2.113 #define SCTLR_RESERVED (3 << 28) | (3 << 22) | (1 << 20) | (1 << 11) #define SCTLR_EE_LITTLE_ENDIAN (0 << 25) #define SCTLR_EOE_LITTLE_ENDIAN (0 << 24) #define SCTLR_I_CACHE_DISABLED (0 << 12) #define SCTLR_D_CACHE_DISABLED (0 << 2) #define SCTLR_MMU_DISABLED (0 << 0) #define SCTLR_MMU_ENABLED (1 << 0) #define SCTLR_VALUE_MMU_DISABLED (SCTLR_RESERVED | SCTLR_EE_LITTLE_ENDIAN | SCTLR_I_CACHE_DISABLED | SCTLR_D_CACHE_DISABLED | SCTLR_MMU_DISABLED) //D13.2.47 #define HCR_RW (1 << 31) #define HCR_VALUE HCR_RW //D13.2.112 #define SCR_RESERVED (3 << 4) #define SCR_RW (1 << 10) #define SCR_NS (1 << 0) #define SCR_VALUE (SCR_RESERVED | SCR_RW | SCR_NS) //C5.2.19 #define SPSR_MASK_ALL (7 << 6) #define SPSR_EL1h (5 << 0) #define SPSR_EL2h (9 << 0) #define SPSR_VALUE (SPSR_MASK_ALL | SPSR_EL1h) ================================================ FILE: rpi_bm/part9/include/timer.h ================================================ #pragma once #include "common.h" void timer_init(); void handle_timer_1(); void handle_timer_3(); void timer_sleep(u32 ms); u64 timer_get_ticks(); ================================================ FILE: rpi_bm/part9/include/utils.h ================================================ #pragma once #include "common.h" void delay(u64 ticks); void put32(u64 address, u32 value); u32 get32(u64 address); ================================================ FILE: rpi_bm/part9/src/boot.S ================================================ #include "mm.h" #include "sysregs.h" .section ".text.boot" .globl _start _start: mrs x0, mpidr_el1 and x0, x0, #0xFF cbz x0, master b proc_hang master: ldr x0, =SCTLR_VALUE_MMU_DISABLED msr sctlr_el1, x0 ldr x0, =HCR_VALUE msr hcr_el2, x0 ldr x0, =SCR_VALUE msr scr_el3, x0 ldr x0, =SPSR_VALUE msr spsr_el3, x0 adr x0, el1_entry msr elr_el3, x0 eret el1_entry: adr x0, bss_begin adr x1, bss_end sub x1, x1, x0 bl memzero mov sp, #LOW_MEMORY bl kernel_main b proc_hang proc_hang: wfe b proc_hang ================================================ FILE: rpi_bm/part9/src/entry.S ================================================ #include "entry.h" .macro kernel_entry sub sp, sp, #S_FRAME_SIZE stp x0, x1, [sp, #16 * 0] stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] str x30, [sp, #16 * 15] .endm .macro kernel_exit ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] ldp x4, x5, [sp, #16 * 2] ldp x6, x7, [sp, #16 * 3] ldp x8, x9, [sp, #16 * 4] ldp x10, x11, [sp, #16 * 5] ldp x12, x13, [sp, #16 * 6] ldp x14, x15, [sp, #16 * 7] ldp x16, x17, [sp, #16 * 8] ldp x18, x19, [sp, #16 * 9] ldp x20, x21, [sp, #16 * 10] ldp x22, x23, [sp, #16 * 11] ldp x24, x25, [sp, #16 * 12] ldp x26, x27, [sp, #16 * 13] ldp x28, x29, [sp, #16 * 14] ldr x30, [sp, #16 * 15] add sp, sp, #S_FRAME_SIZE eret .endm .macro handle_invalid_entry type kernel_entry mov x0, #\type mrs x1, esr_el1 mrs x2, elr_el1 bl show_invalid_entry_message b err_hang .endm .macro ventry label .align 7 b \label .endm //Exception vectors table .align 11 .globl vectors vectors: ventry sync_invalid_el1t // Synchronous EL1t ventry irq_invalid_el1t // IRQ EL1t ventry fiq_invalid_el1t // FIQ EL1t ventry error_invalid_el1t // Error EL1t ventry sync_invalid_el1h // Synchronous EL1h ventry handle_el1_irq // IRQ EL1h ventry fiq_invalid_el1h // FIQ EL1h ventry error_invalid_el1h // Error EL1h ventry sync_invalid_el0_64 // Synchronous 64-bit EL0 ventry irq_invalid_el0_64 // IRQ 64-bit EL0 ventry fiq_invalid_el0_64 // FIQ 64-bit EL0 ventry error_invalid_el0_64 // Error 64-bit EL0 ventry sync_invalid_el0_32 // Synchronous 32-bit EL0 ventry irq_invalid_el0_32 // IRQ 32-bit EL0 ventry fiq_invalid_el0_32 // FIQ 32-bit EL0 ventry error_invalid_el0_32 // Error 32-bit EL0 sync_invalid_el1t: handle_invalid_entry SYNC_INVALID_EL1t irq_invalid_el1t: handle_invalid_entry IRQ_INVALID_EL1t fiq_invalid_el1t: handle_invalid_entry FIQ_INVALID_EL1t error_invalid_el1t: handle_invalid_entry ERROR_INVALID_EL1t sync_invalid_el1h: handle_invalid_entry SYNC_INVALID_EL1h fiq_invalid_el1h: handle_invalid_entry FIQ_INVALID_EL1h error_invalid_el1h: handle_invalid_entry ERROR_INVALID_EL1h sync_invalid_el0_64: handle_invalid_entry SYNC_INVALID_EL0_64 irq_invalid_el0_64: handle_invalid_entry IRQ_INVALID_EL0_64 fiq_invalid_el0_64: handle_invalid_entry FIQ_INVALID_EL0_64 error_invalid_el0_64: handle_invalid_entry ERROR_INVALID_EL0_64 sync_invalid_el0_32: handle_invalid_entry SYNC_INVALID_EL0_32 irq_invalid_el0_32: handle_invalid_entry IRQ_INVALID_EL0_32 fiq_invalid_el0_32: handle_invalid_entry FIQ_INVALID_EL0_32 error_invalid_el0_32: handle_invalid_entry ERROR_INVALID_EL0_32 handle_el1_irq: kernel_entry bl handle_irq kernel_exit .globl err_hang err_hang: b err_hang ================================================ FILE: rpi_bm/part9/src/gpio.c ================================================ #include "gpio.h" #include "utils.h" void gpio_pin_set_func(u8 pinNumber, GpioFunc func) { u8 bitStart = (pinNumber * 3) % 30; u8 reg = pinNumber / 10; u32 selector = REGS_GPIO->func_select[reg]; selector &= ~(7 << bitStart); selector |= (func << bitStart); REGS_GPIO->func_select[reg] = selector; } void gpio_pin_enable(u8 pinNumber) { REGS_GPIO->pupd_enable = 0; delay(150); REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 1 << (pinNumber % 32); delay(150); REGS_GPIO->pupd_enable = 0; REGS_GPIO->pupd_enable_clocks[pinNumber / 32] = 0; } ================================================ FILE: rpi_bm/part9/src/irq.S ================================================ //D13.2.137 .globl irq_init_vectors irq_init_vectors: adr x0, vectors msr vbar_el1, x0 ret //C5.2.2 .globl irq_enable irq_enable: msr daifclr, #2 ret .globl irq_disable irq_disable: msr daifset, #2 ret ================================================ FILE: rpi_bm/part9/src/irq.c ================================================ #include "utils.h" #include "printf.h" #include "entry.h" #include "peripherals/irq.h" #include "peripherals/aux.h" #include "mini_uart.h" #include "timer.h" const char entry_error_messages[16][32] = { "SYNC_INVALID_EL1t", "IRQ_INVALID_EL1t", "FIQ_INVALID_EL1t", "ERROR_INVALID_EL1T", "SYNC_INVALID_EL1h", "IRQ_INVALID_EL1h", "FIQ_INVALID_EL1h", "ERROR_INVALID_EL1h", "SYNC_INVALID_EL0_64", "IRQ_INVALID_EL0_64", "FIQ_INVALID_EL0_64", "ERROR_INVALID_EL0_64", "SYNC_INVALID_EL0_32", "IRQ_INVALID_EL0_32", "FIQ_INVALID_EL0_32", "ERROR_INVALID_EL0_32" }; void show_invalid_entry_message(u32 type, u64 esr, u64 address) { printf("ERROR CAUGHT: %s - %d, ESR: %X, Address: %X\n", entry_error_messages[type], type, esr, address); } void enable_interrupt_controller() { #if RPI_VERSION == 4 REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif #if RPI_VERSION == 3 REGS_IRQ->irq0_enable_1 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; #endif } void handle_irq() { u32 irq; #if RPI_VERSION == 4 irq = REGS_IRQ->irq0_pending_0; #endif #if RPI_VERSION == 3 irq = REGS_IRQ->irq0_pending_1; #endif while(irq) { if (irq & AUX_IRQ) { irq &= ~AUX_IRQ; while((REGS_AUX->mu_iir & 4) == 4) { printf("UART Recv: "); uart_send(uart_recv()); printf("\n"); } } if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; handle_timer_1(); } if (irq & SYS_TIMER_IRQ_3) { irq &= ~SYS_TIMER_IRQ_3; handle_timer_3(); } } } ================================================ FILE: rpi_bm/part9/src/kernel.c ================================================ #include "common.h" #include "mini_uart.h" #include "printf.h" #include "irq.h" #include "timer.h" void putc(void *p, char c) { if (c == '\n') { uart_send('\r'); } uart_send(c); } u32 get_el(); void kernel_main() { uart_init(); init_printf(0, putc); printf("\nRasperry PI Bare Metal OS Initializing...\n"); irq_init_vectors(); enable_interrupt_controller(); irq_enable(); timer_init(); #if RPI_VERSION == 3 printf("\tBoard: Raspberry PI 3\n"); #endif #if RPI_VERSION == 4 printf("\tBoard: Raspberry PI 4\n"); #endif printf("\nException Level: %d\n", get_el()); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Sleeping 200 ms...\n"); timer_sleep(200); printf("Sleeping 2 seconds...\n"); timer_sleep(2000); printf("Sleeping 2 seconds...\n"); timer_sleep(2000); printf("Sleeping 5 seconds...\n"); timer_sleep(5000); printf("DONE!\n"); while(1) { //uart_send(uart_recv()); } } ================================================ FILE: rpi_bm/part9/src/linker.ld ================================================ SECTIONS { .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } . = ALIGN(0x8); bss_begin = .; .bss : { *(.bss*) } bss_end = .; } ================================================ FILE: rpi_bm/part9/src/mini_uart.c ================================================ #include "gpio.h" #include "utils.h" #include "peripherals/aux.h" #include "mini_uart.h" #define TXD 14 #define RXD 15 void uart_init() { gpio_pin_set_func(TXD, GFAlt5); gpio_pin_set_func(RXD, GFAlt5); gpio_pin_enable(TXD); gpio_pin_enable(RXD); REGS_AUX->enables = 1; REGS_AUX->mu_control = 0; REGS_AUX->mu_ier = 0xD; REGS_AUX->mu_lcr = 3; REGS_AUX->mu_mcr = 0; #if RPI_VERSION == 3 REGS_AUX->mu_baud_rate = 270; // = 115200 @ 250 Mhz #endif #if RPI_VERSION == 4 REGS_AUX->mu_baud_rate = 541; // = 115200 @ 500 Mhz #endif REGS_AUX->mu_control = 3; uart_send('\r'); uart_send('\n'); uart_send('\n'); } void uart_send(char c) { while(!(REGS_AUX->mu_lsr & 0x20)); REGS_AUX->mu_io = c; } char uart_recv() { while(!(REGS_AUX->mu_lsr & 1)); return REGS_AUX->mu_io & 0xFF; } void uart_send_string(char *str) { while(*str) { if (*str == '\n') { uart_send('\r'); } uart_send(*str); str++; } } ================================================ FILE: rpi_bm/part9/src/mm.S ================================================ .globl memzero memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret ================================================ FILE: rpi_bm/part9/src/printf.c ================================================ /* File: printf.c Copyright (C) 2004 Kustaa Nyholm This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "printf.h" typedef void (*putcf) (void*,char); static putcf stdout_putf; static void* stdout_putp; #ifdef PRINTF_LONG_SUPPORT static void uli2a(unsigned long int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%=d; d/=base; if (n || dgt>0|| d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void li2a (long num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } uli2a(num,10,0,bf); } #endif static void ui2a(unsigned int num, unsigned int base, int uc,char * bf) { int n=0; unsigned int d=1; while (num/d >= base) d*=base; while (d!=0) { int dgt = num / d; num%= d; d/=base; if (n || dgt>0 || d==0) { *bf++ = dgt+(dgt<10 ? '0' : (uc ? 'A' : 'a')-10); ++n; } } *bf=0; } static void i2a (int num, char * bf) { if (num<0) { num=-num; *bf++ = '-'; } ui2a(num,10,0,bf); } static int a2d(char ch) { if (ch>='0' && ch<='9') return ch-'0'; else if (ch>='a' && ch<='f') return ch-'a'+10; else if (ch>='A' && ch<='F') return ch-'A'+10; else return -1; } static char a2i(char ch, char** src,int base,int* nump) { char* p= *src; int num=0; int digit; while ((digit=a2d(ch))>=0) { if (digit>base) break; num=num*base+digit; ch=*p++; } *src=p; *nump=num; return ch; } static void putchw(void* putp,putcf putf,int n, char z, char* bf) { char fc=z? '0' : ' '; char ch; char* p=bf; while (*p++ && n > 0) n--; while (n-- > 0) putf(putp,fc); while ((ch= *bf++)) putf(putp,ch); } void tfp_format(void* putp,putcf putf,char *fmt, va_list va) { char bf[12]; char ch; while ((ch=*(fmt++))) { if (ch!='%') putf(putp,ch); else { char lz=0; #ifdef PRINTF_LONG_SUPPORT char lng=0; #endif int w=0; ch=*(fmt++); if (ch=='0') { ch=*(fmt++); lz=1; } if (ch>='0' && ch<='9') { ch=a2i(ch,&fmt,10,&w); } #ifdef PRINTF_LONG_SUPPORT if (ch=='l') { ch=*(fmt++); lng=1; } #endif switch (ch) { case 0: goto abort; case 'u' : { #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),10,0,bf); else #endif ui2a(va_arg(va, unsigned int),10,0,bf); putchw(putp,putf,w,lz,bf); break; } case 'd' : { #ifdef PRINTF_LONG_SUPPORT if (lng) li2a(va_arg(va, unsigned long int),bf); else #endif i2a(va_arg(va, int),bf); putchw(putp,putf,w,lz,bf); break; } case 'x': case 'X' : #ifdef PRINTF_LONG_SUPPORT if (lng) uli2a(va_arg(va, unsigned long int),16,(ch=='X'),bf); else #endif ui2a(va_arg(va, unsigned int),16,(ch=='X'),bf); putchw(putp,putf,w,lz,bf); break; case 'c' : putf(putp,(char)(va_arg(va, int))); break; case 's' : putchw(putp,putf,w,0,va_arg(va, char*)); break; case '%' : putf(putp,ch); default: break; } } } abort:; } void init_printf(void* putp,void (*putf) (void*,char)) { stdout_putf=putf; stdout_putp=putp; } void tfp_printf(char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(stdout_putp,stdout_putf,fmt,va); va_end(va); } static void putcp(void* p,char c) { *(*((char**)p))++ = c; } void tfp_sprintf(char* s,char *fmt, ...) { va_list va; va_start(va,fmt); tfp_format(&s,putcp,fmt,va); putcp(&s,0); va_end(va); } ================================================ FILE: rpi_bm/part9/src/timer.c ================================================ #include "printf.h" #include "peripherals/timer.h" #include "peripherals/irq.h" #include "peripherals/aux.h" const u32 interval_1 = CLOCKHZ; u32 cur_val_1 = 0; const u32 interval_3 = CLOCKHZ / 4; u32 cur_val_3 = 0; void timer_init() { cur_val_1 = REGS_TIMER->counter_lo; cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; cur_val_3 = REGS_TIMER->counter_lo; cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; } void handle_timer_1() { cur_val_1 += interval_1; REGS_TIMER->compare[1] = cur_val_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; //printf("Timer 1 received.\n"); } void handle_timer_3() { cur_val_3 += interval_3; REGS_TIMER->compare[3] = cur_val_3; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; //printf("Timer 3 received.\n"); } u64 timer_get_ticks() { u32 hi = REGS_TIMER->counter_hi; u32 lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((u64)hi << 32) | lo; } //sleep in milliseconds. void timer_sleep(u32 ms) { u64 start = timer_get_ticks(); while(timer_get_ticks() < start + (ms * 1000)) { } } ================================================ FILE: rpi_bm/part9/src/utils.S ================================================ .globl delay delay: subs x0, x0, #1 bne delay ret .globl put32 put32: str w1, [x0] ret .globl get32 get32: ldr w0, [x0] ret .globl get_el get_el: mrs x0, CurrentEL lsr x0, x0, #2 ret